码迷,mamicode.com
首页 > 数据库 > 详细

sql解决主键冲突

时间:2017-11-20 13:01:37      阅读:383      评论:0      收藏:0      [点我收藏+]

标签:else   strong   dev   sql   col   span   word   round   int   

在数据插入的时候,假设主键对应的值已经存在,则插入失败!这就是主键冲突。
当主键存在冲突(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解决主键冲突

标签:else   strong   dev   sql   col   span   word   round   int   

原文地址:http://www.cnblogs.com/luffe/p/7865316.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!