您的位置:首页 > 数据库 > MySQL

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

2019-04-30 14:39 501 查看

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标准语法!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐