刪除列,我有很多的INSERT
指令的大SQL文件(〜200MB):在SQL文件
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
指令的大SQL文件(〜200MB):在SQL文件
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的一個班輪應該這樣做:
perl -p -i.bak -e 's/\([^,]+,/\(/g; s/,[^,]+\)/\)/g' sqlfile
它編輯而不是文件,而是創建一個帶有擴展名.bak的備份副本。
或者如果你喜歡紅寶石:
ruby -p -i.bak -e 'gsub(/\([^,]+,/, "("); gsub/, ")");' sqlfile
CREATE TABLE #MyTempTable(ID INT,film_id SMALLINT,genre_id INT,NUM整數)
INSERT INTO #MyTempTable(id
,film_id
,genre_id
,num
)
[Data goes here]
insert into films_genres(film_id
,genre_id
)select film_id
,genre_id
從#MyTempTable
DROP TABLE #MyTempTable
+1最快和最簡單的方法(看,不用數據庫)。 – sln 2011-03-12 00:21:20
除OP似乎更喜歡使用Ruby。 – 2011-03-12 05:19:50
注意到;添加了一個紅寶石單線版本。 – 2011-03-12 10:11:27