MySQL:不存在则插入,存在则更新或忽略 INSERT ... ON DUPLICATE KEY UPDATE(以联合主键为例)

MySQL语法:如果数据不存在则插入,存在则更新或忽略。

MySQL语法支持如果数据不存在则插入,存在则更新或忽略。

INSERT INTO `表名`(属性1,属性2,属性3) VALUES('值1','值2','值2') 
ON DUPLICATE KEY UPDATE 属性3='值3';

本文以联合主键(即就是用多个字段一起作为一张表的主键)为例,对这一语法做测试示例。

数据表项示例:其中t_flidt_id为联合主键。
在这里插入图片描述

  1. SQL语句示例:
    如果行作为新记录被插入,则受影响行的值为1
INSERT INTO `t_fdt`(t_flid,t_id,t_time) VALUES('333','222','111') 
ON DUPLICATE KEY UPDATE t_time='000';

在这里插入图片描述
在这里插入图片描述

  1. 再次执行这一语句,因为数据库中这一主键的数据项已存在故执行update。可见如果原有的记录被更新,则受影响行的值为2
    在这里插入图片描述
    在这里插入图片描述
  2. 我们更换了t_id这一值,执行的是无则插入语句。可见当表中有多个主键时,联合主键联合保证唯一索引。
INSERT INTO `t_fdt`(t_flid,t_id,t_time) VALUES('333','444','111') 
ON DUPLICATE KEY UPDATE t_time='000';

在这里插入图片描述
能有同样效果的语句还有REPLACE INTO:如果插入的数据会导致UNIQUE 索引或PRIMARY KEY发生冲突/重复,则先删除旧数据再插入最新的数据,此时受影响的行数也是2(与INSERT … ON DUPLICATE KEY UPDATE类似,这里并未做演示示例)。

如果你想了解更多关于INSERT INTO … ON DUPLICATE KEY的功能说明,详见MySQL官方参考文档13.2.6.2 INSERT … ON DUPLICATE KEY UPDATE Syntax
注意:ON DUPLICATE KEY UPDATE和REPLACE INTO只是MySQL的特有语法,并不是SQL标准语法!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值