企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
所谓主键冲突是指,当插入一条记录的时候,如果插入的记录的主键值,在现有的数据中已经存在,则此时,因为主键不能重复,因此就产生了“主键冲突”。 主键冲突的演示: 现有数据: ![](https://img.kancloud.cn/c5/1f/c51f5bf66c65ca746c74a3640af74220_359x133.jpg) 插入一个数据(其主键已经存在的情形): ![](https://img.kancloud.cn/95/2d/952d1f94f1170c056a60ef337db444ae_684x34.jpg) 那如果出现主键冲突,该怎么办呢? * 办法1:忽略 ——终止插入,数据不改变,语句不报错。 其语法为: ``` insert ignore into 表名 ( 字段.... ) values (值.....); ``` ![](https://img.kancloud.cn/de/d8/ded832e8263d65ac9fba7f758ed9843b_727x51.jpg) * 办法2:替换 ——删除原纪录,插入新纪录。 其语法为: ``` replace into 表名 ( 字段.... ) values (值.....); ``` 说明:此replace的用法跟insert一样,也可以插入新纪录,只是如果新纪录出现主键冲突,就会删除原纪录后,再插入该新纪录。 ![](https://img.kancloud.cn/0c/55/0c55bcf850ebe6412834ba7aff3b829b_677x199.jpg) * 办法3:更新 ——设置为去更新原有数据(而并不插入)。 语法为: ``` insert into 表名 ( 字段.... ) values (值.....) on duplicate key update XX字段=新的值; ``` 更新类似“替换”(replace),区别是: 替换:是将新的数据完整覆盖旧的数据 更新:可以预先设定需要覆盖的旧数据 ![](https://img.kancloud.cn/51/c4/51c4dc1facc0b585ec85cd9956acb135_666x420.jpg) ![](https://img.kancloud.cn/3a/0e/3a0e2f3bd47178968996825da9726cdd_545x259.jpg)