mysql 防止重复插入 on DUPLICATE KEY UPDATE 单行插入和多行插入

本文详细解析MySQL中ONDUPLICATEKEYUPDATE语句的使用方法,当INSERT操作遇到主键冲突时,如何通过VALUES函数更新已有记录,同时插入新行。通过具体示例展示如何在多行记录插入时正确应用此特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

表中数据:

其中id设置为主键,执行插入两条主键冲突的数据,如果包含该主键则只更新列name:

insert into  t_my (id,name) VALUES (2,'bob2'),(3,'bob3') on DUPLICATE KEY UPDATE name = VALUES(name);

更新之后表数据为:

前提是表有主键或者唯一索引,若有多个索引都冲突,则只根据一个索引更新。

如需根据条件更新则可以使用mysql自带if()函数。

 

现在问题来了,如果INSERT多行记录, ON DUPLICATE KEY UPDATE后面字段的值怎么指定?要知道一条INSERT语句中只能有一个ON DUPLICATE KEY UPDATE,到底他会更新一行记录,还是更新所有需要更新的行。这个问题困扰了我很久了,其实使用VALUES()函数一切问题都解决了。
 

举个例子,字段a被定义为UNIQUE,并且原数据库表table中已存在记录(2,2,9)和(3,2,1),如果插入记录的a值与原有记录重复,则更新原有记录,否则插入新行:

INSERT INTO TABLE (a,b,c) VALUES 
(1,2,3),
(2,5,7),
(3,3,6),
(4,8,2)

ON DUPLICATE KEY UPDATE b=VALUES(b);

以上SQL语句的执行,发现(2,5,7)中的a与原有记录(2,2,9)发生唯一值冲突,则执行ON DUPLICATE KEY UPDATE,将原有记录(2,2,9)更新成(2,5,9),将(3,2,1)更新成(3,3,1),插入新记录(1,2,3)和(4,8,2)
注意:ON DUPLICATE KEY UPDATE只是MySQL的特有语法,并不是SQL标准语法!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值