mysql 插入更新判断 ON DUPLICATE KEY UPDATE 和 REPLACE INTO

2021年11月23日 阅读数:3
这篇文章主要向大家介绍mysql 插入更新判断 ON DUPLICATE KEY UPDATE 和 REPLACE INTO,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

平时咱们在设计数据库表的时候总会设计 unique 或者 给表加上 primary key 的限制条件.
此时 插入数据的时候 ,常常会有这样的状况:
咱们想向数据库插入一条记录:数据库

  • 若数据表中存在以相同主键的记录,咱们就更新该条记录。
  • 不然就插入一条新的记录。

ON DUPLICATE KEY UPDATE

若是在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,而且插入行后会致使在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE;若是不会致使惟一值列重复的问题,则插入新行。 
例如,若是列 a 为 主键 或 拥有UNIQUE索引,而且包含值1,则如下两个语句具备相同的效果:spa

INSERT INTO test (a, b, c) VALUES ('1', 'b1', 'c1')  ON DUPLICATE KEY UPDATE b='b2', c='c2';  

UPDATE test SET b = 'b2', c = 'c2' WHERE a = '1'

 

主要方式 :设计

INSERT ... SELECTcode

INSERT ... ON DUPLICATE KEY UPDATEblog

INSERT ... ON DUPLICATE REPLACE索引

 

replace into

replace into原理

replace into 跟 insert 功能相似,不一样点在于:replace into 首先尝试插入数据到表中,若是发现表中已经有此行数据(根据主键或者惟一索引判断)则先删除此行数据,而后插入新的数据,不然没有此行数据的话,直接插入新数据。class

replace into的应用注意事项

插入数据的表必须有主键或者是惟一索引!不然的话,replace into 会直接插入数据,这将致使表中出现重复的数据。若是数据库里边有这条记录,则直接修改这条记录;若是没有则,则直接插入,在有外键的状况下,对主表进行这样操做时,由于若是主表存在一条记录,被从表所用时,直接使用replace into是会报错的,这和replace into的内部原理是相关(ps.它会先删除而后再插入)。
正确作法是- 即先删除该条存在的数据,而后再次插入这条数据,这和外键约束相悖呢,所以只能采用update和insert这样的组合,来应对外键约束test

replace into的使用形式

replace into tbl_name(col_name, ...) values(...)
replace into tbl_name(col_name, ...) select ...
replace into tbl_name set col_name=value, ...原理