2012-04-27 32 views
1

每當在'table1'中插入新行時,我一直很難弄清楚如何使'table2'根據'table1'中的值更新它的值。根據插入到table1中的內容,觸發器可能需要在表2中插入新行,或者僅更新table2中現有行中的值。我使用'load data infile'和文本文件每次向'table1'插入幾千行。如果可能的話,我希望表2中的更新在整個文件插入到'table1'後發生,而不是在插入每行之後。任何幫助將不勝感激。下面我列出了table1的定義以及我在table2中需要的。用於加載數據infile的mysql觸發器

//Table1 
create table table1 (
V1 varchar(5), 
V2 varchar(5), 
V3 date, 
V4 double, 
V5 date, 
V6 double, 
V7 double, 
Primary Key (V1,V2,V3,V4,V5)); 

//Table2 
V1 - Same as table1 
V2 - Same as table1 
V3 - Same as table1 
V4 - Same as table1 
V5 date - minimum of V5 in table1 
V6 date - maximum of V5 in table1 
+0

我決定走不同的路線。我發現MySQL觸發器的一個限制是它們必須在每一行之後執行,並且如果使用'load data infile'一次插入幾千行,這會產生很大的開銷。相反,我寫了一個簡短的小方法,在將整個文件插入數據庫後,我的java應用程序只運行一次。 – Riggster 2012-05-01 21:04:49

回答

1

作爲部分答案我自己的問題,我發現作爲的MySQL 5.6版(最新版)觸發器只能配置每一行插入後運行。如果正在使用load data infile,則不能將觸發器配置爲在插入整個文件之後而不是在每行之後運行。

希望這會稍後擴大。由於現在的語法正確,因此在創建觸發器時,必須包含短語FOR EACH ROW。如果您省略該短語,則會出現錯誤,但沒有其他選項,如FOR EACH 10 ROWSFOR EACH FILE