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

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

第一种
  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. 非常适合只更新表中部分信息,同事保留没有修改过的旧有信息
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 要是不学生物,我应该是一个不称职的心理医生,听别人说故事,而不断加深自己内心的色彩。一块画布上重复着色彩,不断构成...
    刘陶阅读 360评论 0 0
  • 今天又干了一天活,也确实有收获,时间加起来可能看起来并不长,总共6~7个小时,但确实是花了百分百的精力去搞,很花...
    LeBronZames阅读 81评论 0 0