MySQL 当记录不存在时insert,当记录存在时update

2018-03-04  本文已影响0人  三招六式一把铁斧

目前网上有三种方法,暂时只尝试了其中的一种

第一种
  1. 利用关键字:REPLACE
    注:(1)我们在使用数据库时可能会经常遇到这种情况。如果一个表在一个字段上建立了唯一索引,当我们再向这个表中使用已经存在的键值insert一条记录,那将会抛出一个主键冲突的错误。当然,我们可能想用新记录的值来覆盖原来的记录值。如果使用传统的做法,必须先使用DELETE语句删除原先的记录,然后再使用 INSERTinsert新的记录。而在MySQL中为我们提供了一种新的解决方案,这就是REPLACE语句。使用REPLACEinsert一条记录时,如果不重复,REPLACE就和INSERT的功能一样,如果有重复记录,REPLACE就使用新记录的值来替换原来的记录值。
    (2)使用REPLACE的最大好处就是可以将DELETE和INSERT合二为一,形成一个原子操作。这样就可以不必考虑在同时使用DELETE和INSERT时添加事务等复杂操作了
    (3)在执行REPLACE后,系统返回了所影响的行数,如果返回1,说明在表中并没有重复的记录,如果返回2,说明有一条重复记录,系统自动先调用了 DELETE删除这条记录,然后再记录用INSERT来insert这条记录。如果返回的值大于2,那说明有多个唯一索引,有多条记录被删除和insert。
  2. REPLACE的语法和INSERT非常的相似,如下面的REPLACE语句是insert或更新一条记录。
    示例:
replace into rap_order values(4,112,21,'A01011101',234);
REPLACE做插入操作.png
replace into rap_order values(1,112,21,'A01011101',234);
REPLACE做更新操作.png
replace into rap_order values(5,115,21,'A01011101',234),(5,114,22,'A01011101',234);
#注:replace 同时向rpa_order 中into多条记录,在添加的过程中最后面的重复的记录直接将前面的记录更新
REPLACE做更新操作.png
第二种

使用insert ... on duplicate key update...
eg:

INSERT INTO shebao_collection(customer_code,customer_name) VALUES('1001','hw') ON DUPLICATE KEY UPDATE numbers = 5
SQL执行前
SQL执行后
1. 重复的字段必须是唯一的,主键或者唯一索引,上表中customer_code是唯一索引
2. 后面的update后面直接写字段名即可,不需要写values()、where 条件等
3. 非常适合只更新表中部分信息,同事保留没有修改过的旧有信息
上一篇下一篇

猜你喜欢

热点阅读