Mysql 主键冲突(ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY')

Mysql 主键冲突(ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY')

码农世界 2024-06-13 后端 110 次浏览 0个评论
  • 在插入数据的时候,如果插入的数据主键已经存在,那么这条数据就会报错主键冲突,并终止执行:

    ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

  • 解决办法:

    1、忽略:ignore 忽略错误,正常终止插入,数据不会改变。

    insert ignore into 表名 (字段列表) values (值列表);

    2、替换:replace 将新数据完整覆盖旧数据。

    replace into 表名 (字段列表) values (值列表);

    3、更新:on duplicate key 可以预先设定需要覆盖的旧数据,如果发生冲突,则更新指定的字段为指定的新值即可。

    insert into 表名 (字段列表) values (值列表) on duplicate key update 字段名=新值, 字段名=新值, ...;

  • 测试数据:

    mysql> select * from test; +----+-------+------+------+ | id | name | sex | age | +----+-------+------+------+ | 1 | name1 | 男 | 5 | | 2 | name2 | 女 | 10 | | 3 | name3 | 男 | 15 | | 4 | name4 | 男 | 20 | +----+-------+------+------+

    ``` 插入一条已经存在的主键数据 id = 1 mysql> insert into test (id, name, sex, age) values (1, 'name5', '女', 25); ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

    忽略 ignore 冲突数据不变 mysql> insert ignore into test (id, name, sex, age) values (1, 'name5', '女', 25); Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> select * from test; +----+-------+------+------+ | id | name | sex | age | +----+-------+------+------+ | 1 | name1 | 男 | 5 | | 2 | name2 | 女 | 10 | | 3 | name3 | 男 | 15 | | 4 | name4 | 男 | 20 | +----+-------+------+------+

    替换 replace 直接替换冲突主键的值为最新的数据 mysql> replace into test (id, name, sex, age) values (1, 'name5', '女', 25); mysql> select * from test; +----+-------+------+------+ | id | name | sex | age | +----+-------+------+------+ | 1 | name5 | 女 | 25 | | 2 | name2 | 女 | 10 | | 3 | name3 | 男 | 15 | | 4 | name4 | 男 | 20 | +----+-------+------+------+

    更新 on duplicate key 如果发生冲突,则更新指定的字段为指定的新值即可 mysql> insert into test (id, name, sex, age) values (1, 'name1', '男', 5) on duplicate key update name='name1', sex=' 男', age=5; mysql> select * from test; +----+-------+------+------+ | id | name | sex | age | +----+-------+------+------+ | 1 | name1 | 男 | 5 | | 2 | name2 | 女 | 10 | | 3 | name3 | 男 | 15 | | 4 | name4 | 男 | 20 | +----+-------+------+------+ ```

转载请注明来自码农世界,本文标题:《Mysql 主键冲突(ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY')》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,110人围观)参与讨论

还没有评论,来说两句吧...

Top