zoukankan      html  css  js  c++  java
  • mysql replace into 实现存在则更新,不存在则插入

    测试用的mysql数据库:

    新建测试表:

    CREATE TABLE `test` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT,
      `text` varchar(255) DEFAULT NULL,
      `uid` varchar(11) DEFAULT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `uid_unique` (`uid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    以上建表三个字段,id是主键自增,bigint类型。uid是字符串,但是加上了唯一约束’uid_unique‘。

    (1) 添加新的数据

    因为库里面没有新的数据,所以肯定是产生一条数据。

     (2) 产生一条新的数据,和 id 以及 uid都不冲突的

    这个时候,因为id是主键自增的,所以这个时候,会产生一个次于最大值的值,就是1002 

    (3)现在测试 id冲突,但是 uid不冲突的

    发现会以id为 依据进行替换。

    (4)测试uid冲突,但是id不冲突的。

    结果:

    发现会根据uid进行替换。

     (5)当id和uid都冲突的时候

    发现会根据这些进行替换。

    (6)当uid冲突的时候,且自增主键,id为空的时候

     

     发现这个时候会删除这条信息,然后新生成一个id。

    综上所述,总的来说replace into 操作的结果是: 首先会判断是否存在冲突,可以是主键冲突,也可以是唯一约束。 然后删除这些数据,然后再插入数据。删除数据后插入的效果就跟insert into是一样的。

  • 相关阅读:
    Jenkins持续集成
    爬豆瓣保存到sqlite3
    爬豆瓣保存到Excel
    sqlite3数据库的增删查改
    用pandas和matplotlib对用户消费行为分析
    TCP请求
    fastjson
    断言
    将结果写入文件
    加解密
  • 原文地址:https://www.cnblogs.com/chenmz1995/p/11053865.html
Copyright © 2011-2022 走看看