MySql中4種批量更新的方法

2022-05-18 19:59:45 字數 2621 閱讀 7536

最近在完成mysql專案整合的情況下,需要增加批量更新的功能,根據網上的資料整理了一下,很好用,都測試過,可以直接使用。

mysql 批量更新共有以下四種辦法

1、.replace into 批量更新

replace into test_tbl (id,dr) values (1,'2'),(2,'3'),...(x,'y');

例子:replace into book (`id`,`author`,`createdtime`,`updatedtime`) values (1,'張飛','2016-12-12 12:20','2016-12-12 12:20'),(2,'關羽','2016-12-12 12:20','2016-12-12 12:20');

2、insert into ...on duplicate key update批量更新

insert into test_tbl (id,dr) values (1,'2'),(2,'3'),...(x,'y') on duplicate key update dr=values(dr);

例子:insert into book (`id`,`author`,`createdtime`,`updatedtime`) values (1,'張飛2','2017-12-12 12:20','2017-12-12 12:20'),(2,'關羽2','2017-12-12 12:20','2017-12-12 12:20') on duplicate key update author=values(author),createdtime=values(createdtime),updatedtime=values(updatedtime);

replace into  和 insert into on duplicate key update的不同在於:

replace into 操作本質是對重複的記錄先delete 後insert,如果更新的字段不全會將缺失的字段置為預設值,用這個要悠著點否則不小心清空大量資料可不是鬧著玩的。

insert into 則是只update重覆記錄,不會改變其它字段。

3.建立臨時表,先更新臨時表,然後從臨時表中update

create temporary table tmp(id int(4) primary key,dr varchar(50));

insert into tmp values  (0,'gone'), (1,'xx'),...(m,'yy');

update test_tbl, tmp set test_tbl.dr=tmp.dr where test_tbl.id=tmp.id;

注意:這種方法需要使用者有temporary 表的create 許可權。

4、使用mysql 自帶的語句構建批量更新

mysql 實現批量 可以用點小技巧來實現:

update yoiurtable

set dingdan = case id 

when 1 then 3 

when 2 then 4 

when 3 then 5 

endwhere id in (1,2,3)

這句sql 的意思是,更新dingdan 字段,如果id=1 則dingdan 的值為3,如果id=2 則dingdan 的值為4……

where部分不影響**的執行,但是會提高sql執行的效率。確保sql語句僅執行需要修改的行數,這裡只有3條資料進行更新,而where子句確保只有3行資料執行。   

例子:update book

set author = case id 

when 1 then '黃飛鴻' 

when 2 then '方世玉'

when 3 then '洪熙官'

endwhere id in (1,2,3)

如果更新多個值的話,只需要稍加修改:

update categories      

set dingdan = case id 

when 1 then 3 

when 2 then 4 

when 3 then 5 

end, 

title = case id 

when 1 then 'new title 1'

when 2 then 'new title 2'

when 3 then 'new title 3'

endwhere id in (1,2,3)

例子:update book

set author = case id 

when 1 then '黃飛鴻2' 

when 2 then '方世玉2'

when 3 then '洪熙官2'

end,

code = case id 

when 1 then 'hfh2' 

when 2 then 'fsy2'

when 3 then 'hxg2'

endwhere id in (1,2,3)

到這裡,已經完成一條mysql語句更新多條記錄了。

MySql中4種批量更新的方法

replace into test tbl id,dr values 1,2 2,3 x,y 例 replace into book id author createdtime updatedtime values 1,張飛 2016 12 12 12 20 2016 12 12 12 20 2,關...

MySql中4種批量更新的方法

replace into test tbl id,name values 1,a 2,b x,y 示例 replace into book id author createdtime updatedtime values 1,張飛 2016 12 12 12 20 2016 12 12 12 20 ...

MySql批量更新方法

準備資料 表 user 使用者 dept 部門 1 更新符合單個條件的某個欄位的一條資料 update user u set u.name 測試 where u.id 2 in 更新多條資料 update user u set u.name 測試 where u.id in 3 符合多個條件更新內容...