sql解决主键冲突

Posted 小白兔奶糖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql解决主键冲突相关的知识,希望对你有一定的参考价值。

在数据插入的时候,假设主键对应的值已经存在,则插入失败!这就是主键冲突。
当主键存在冲突(duplicate key)的时候,可以选择性的进行处理,即忽略、更新或者替换。

1.忽略

insert ignore into table

保持原记录,忽略新插入的记录

 

2.替换

replace into table

替换原记录,即先删除原记录,再插入新的记录

 

3. 更新

insert into table value("xx","xx") ON DUPLICATE KEY UPDATE

其实这个是原本需要执行3条SQL语句(SELECT,INSERT,UPDATE),缩减为1条语句即可完成。

IF (SELECT * FROM where 存在) {
    UPDATE  SET  WHERE ;
} else {
    INSERT INTO;
}

如:

mysql> insert into Tble values (1,‘xxx‘,‘xxx‘) ON DUPLICATE KEY UPDATE status =‘drain‘;
Query OK, 2 rows affected (0.00 sec)

上面语句伪代码表示即为

if (select * from table where id=1) { 
    update device set status =‘drain‘ where id=1 
} else {
    insert into table value (1,‘xxx‘,‘xxx‘)
}

很明显,id=1 是有的,这样就执行update操作

mysql> select * from table;
+-------+--------+-----------+
|     id| status | spec_char |
+-------+--------+-----------+
|     1 | drain  | yangting  | 
|     2 | dead   | zhong     | 
+-------+--------+-----------+
2 rows in set (0.00 sec)


以上是关于sql解决主键冲突的主要内容,如果未能解决你的问题,请参考以下文章

Oracle+Entity Framework主键冲突

由于截断/删除导致 SQL Server 主键冲突?

oracle大数据量写入时主键冲突,如何解决

重新插入以前删除的行时 SQL SERVER 2017 主键冲突

13.MySQL解决主键冲突

解决Pg新增数据主键冲突