在数据插入的时候,假设主键对应的值已经存在,则插入失败!这就是主键冲突。
当主键存在冲突(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条语句即可完成。
即
如:
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)
我来说两句