MySql快速插入以及批量更新

2022-06-28 22:54:18 字數 2079 閱讀 3673

mysql快速插入以及批量更新

插入:mysql提供了可以一次插入多條資料的用法:

[sql] 

insert into tbl_name (a,b,c) values(1,2,3),(4,5,6),(7,8,9),(10,11,12)...;  

在程式中可以通過迴圈,新增values對應的列表,最後使用一次executeupdate完成插入操作。但是mysql語句並不是越長越好,mysql語句長度有限制,可以檢視mysql的配置檔案my.in中max_allowed_packet屬性,並進行相應設定。

更新:mysql中沒有提供像insert一樣一次更新多條記錄,需要逐條語句拼接。

[sql] 

update weibo set username = 'xyw' where id = '22';update weibo set userid = '143' where id = '35';  

你可以使用addbatch語句,將拼接起來的sql語句進行一次性處理,但是效率並不高。

還需要處理resultset的釋放問題,否則mysql會報錯:"commands out of sync; you can't run this command now"

針對update語句,雖然並沒有resultset返回,但仍然需要釋放。而由於未知原因(可能是sql語句太長?),釋放resultset非常耗時,最終算下來得不償失。

針對以上的不足,可以使用另一種方法執行批量更新。

[sql] 

insert into tbl_name [col_name1, col_name2,...)] values(col_value1,col_value2,...), (col_value1,col_value2,...)on duplicate key update username=values(username)  

使用這種方法必須滿足條件:col_name1, col_name2,...中必須有主鍵或者唯一鍵。

username是要更新的列。

如果想一次更新多列,可以在username=values(username)後面繼續新增,例如:

[sql] 

insert into tbl_name [col_name1, col_name2,...)] values(col_value1,col_value2,...), (col_value1,col_value2,...)on duplicate key update username=values(username), userid = values(userid)  

這樣就可以同時更新username和userid兩個字段。

它的實現原理是,首先mysql根據表名後面列出的主鍵,查詢表(因為是主鍵,所以在表中唯一存在)。如果存在該行資料,則按照最後的col_name = values(col_name)列表對相應的字段,按照values列表中給出的值進行更新。建議:表名後面的字段列表,除了主鍵之外,列出來的最好都作為更新的物件,即在語句最後都要有相應的col_name = values(col_name),否則,你在表名後羅列出來字段,在values中賦值了,但是不是更新的物件,顯然是浪費。

如果不存在該行資料,則進行插入操作,沒有作為更新物件的列按照預設值填充(前提是mysql執行在非嚴格模式下。如果在嚴格模式下,沒列都需要有預設值,否則執行出錯)。

注意:主鍵可以作為更新的物件 ,但是只是在表中不存在該記錄時起作用,即執行了插入操作,如果表中已經存在了該主鍵對應的行資料,下次更新時不會再插入該行,而是執行除了主鍵之外的其他列的更新操作。所以最好不要將主鍵設定為更新的物件。

例項:[sql] 

insert into keywordtable(id, keyword, username, userid) values(1, '你好', 'eliot', 22), (2, 'hello', 'jhon', 23),   

(3, '嘻嘻', 'jim', 24) on duplicate key update keyword=values(keyword), username=values(username),userid=values(userid);  

除了id外,欄位有keyword, username, userid,他們是要更新的字段。

**:

MySql快速插入以及批量更新

mysql快速插入以及批量更新 插入 mysql提供了可以一次插入多條資料的用法 sql insert into tbl name a,b,c values 1,2,3 4,5,6 7,8,9 10,11,12 在程式中可以通過迴圈,新增values對應的列表,最後使用一次executeupdate...

MySql快速插入以及批量更新

mysql快速插入以及批量更新 插入 mysql提供了可以一次插入多條資料的用法 sql insert into tbl name a,b,c values 1,2,3 4,5,6 7,8,9 10,11,12 在程式中可以通過迴圈,新增values對應的列表,最後使用一次executeupdate...

Mysql批量插入更新

批量插入,使用mybatis批量語法 insert id insertbatch parametertype list insert into tbl1 a,b,c values foreach collection list item obj separator foreach insert 使用...