删除SQL文件中的列
我有一个很大的SQL文件(~200MB),其中包含大量的删除SQL文件中的列,sql,ruby,regex,text-processing,Sql,Ruby,Regex,Text Processing,我有一个很大的SQL文件(~200MB),其中包含大量的INSERT指令: insert into `films_genres` (`id`,`film_id`,`genre_id`,`num`) values (1,1,1,1), (2,1,17,2), (3,2,1,1), ... 如何删除或忽略脚本中的列id,num。最简单的方法可能是将所需的列完全插入到临时保留表中,然后从保留表中将所需的列插入到实表中 insert into `
INSERT
指令:
insert into `films_genres`
(`id`,`film_id`,`genre_id`,`num`)
values
(1,1,1,1),
(2,1,17,2),
(3,2,1,1),
...
如何删除或忽略脚本中的列
id
,num
。最简单的方法可能是将所需的列完全插入到临时保留表中,然后从保留表中将所需的列插入到实表中
insert into `films_genres_temp`
(`id`,`film_id`,`genre_id`,`num`)
values
(1,1,1,1),
(2,1,17,2),
(3,2,1,1),
...
insert into `films_genres`
(`film_id`,`genre_id`)
select `film_id`,`genre_id`
from `films_genres_temp`
这个Perl one liner应该可以做到这一点:
perl -p -i.bak -e 's/\([^,]+,/\(/g; s/,[^,]+\)/\)/g' sqlfile
它在位编辑文件,但创建扩展名为.bak的备份副本
或者,如果您更喜欢Ruby:
ruby -p -i.bak -e 'gsub(/\([^,]+,/, "("); gsub/, ")");' sqlfile
创建表#mytentable(id int、film#id smallint、genre#u id int、num int)
插入到#我的诱惑(id
,film\u id
,genre\u id
,num
)[这里有数据] 插入电影类型(
film\u id
,genre\u id
)从#我的诱惑选择film\u id
,genre\u id
)
删除表#mytentable+1以获得最快和最简单的方法(look ma,无数据库)。除了OP似乎更喜欢使用Ruby;添加了一个ruby单行程序版本。