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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Mysql 主键冲突(ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY')

  • 在插入数据的时候,如果插入的数据主键已经存在,那么这条数据就会报错主键冲突,并终止执行:


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 | +----+-------+------+------+ ```


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
269
分享
相关文章
docker pull mysql:8.0.26提示Error response from daemon: Get “https://registry-1.docker.io/v2/“: EOF错误
docker pull mysql:8.0.26提示Error response from daemon: Get “https://registry-1.docker.io/v2/“: EOF错误
MySQL主键谁与争锋:MySQL为何钟爱自增主键ID+UUID?
本文深入探讨了在MySQL中使用自增类型主键的优势与局限性。自增主键通过保证数据的有序性和减少索引维护成本,提升了查询和插入性能,简化了数据库管理和维护,并提高了数据一致性。然而,在某些业务场景下,如跨表唯一性需求或分布式系统中,自增主键可能无法满足要求,且存在主键值易预测的安全风险。因此,选择主键类型时需综合考虑业务需求和应用场景。
132 2
MySQL高级篇——覆盖索引、前缀索引、索引下推、SQL优化、主键设计
覆盖索引、前缀索引、索引下推、SQL优化、EXISTS 和 IN 的区分、建议COUNT(*)或COUNT(1)、建议SELECT(字段)而不是SELECT(*)、LIMIT 1 对优化的影响、多使用COMMIT、主键设计、自增主键的缺点、淘宝订单号的主键设计、MySQL 8.0改造UUID为有序
mysql中主键索引和联合索引的原理与区别
本文详细介绍了MySQL中的主键索引和联合索引原理及其区别。主键索引按主键值排序,叶节点仅存储数据区,而索引页则存储索引和指向数据域的指针。联合索引由多个字段组成,遵循最左前缀原则,可提高查询效率。文章还探讨了索引扫描原理、索引失效情况及设计原则,并对比了InnoDB与MyISAM存储引擎中聚簇索引和非聚簇索引的特点。对于优化MySQL性能具有参考价值。
MySQL报ERROR 2002 (HY000)解决
通过上述步骤,可以有效地解决MySQL连接时出现的 `ERROR 2002 (HY000)`错误。这些步骤包括检查和启动MySQL服务、配置文件检查、套接字文件检查、日志文件分析、进程检查、防火墙设置、客户端配置和最终的MySQL重装。确保每个步骤都按顺序执行,有助于快速定位和解决问题,使MySQL服务器恢复正常运行。
2949 0
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
62 0
mysql密码错误-ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using passwor:yes)
这篇文章提供了解决MySQL数据库"Access denied for user 'root'@'localhost' (using password: YES)"错误的方法,通过跳过密码验证、修改root密码,然后重启服务来解决登录问题。
mysql密码错误-ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using passwor:yes)
【Azure 应用服务】应用服务连接 Azure MySQL 一直失败,报错 Create connection error
【Azure 应用服务】应用服务连接 Azure MySQL 一直失败,报错 Create connection error
docker拉取MySQL后数据库连接失败解决方案
通过以上方法,可以解决Docker中拉取MySQL镜像后数据库连接失败的常见问题。关键步骤包括确保容器正确启动、配置正确的环境变量、合理设置网络和权限,以及检查主机防火墙设置等。通过逐步排查,可以快速定位并解决连接问题,确保MySQL服务的正常使用。
116 82
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库