美文网首页
MySQL 当记录不存在时insert,当记录存在时update

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

作者: 三招六式一把铁斧 | 来源:发表于2018-03-04 00:17 被阅读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. 非常适合只更新表中部分信息,同事保留没有修改过的旧有信息
    

    相关文章

      网友评论

          本文标题:MySQL 当记录不存在时insert,当记录存在时update

          本文链接:https://www.haomeiwen.com/subject/xraxfftx.html