首页 > 数据库 >处理MYSQL 插入数据时主键相同的场景:新增?替换?忽略?

处理MYSQL 插入数据时主键相同的场景:新增?替换?忽略?

时间:2024-12-24 09:46:05浏览次数:9  
标签:INSERT name 记录 主键 插入 MYSQL id

在 MySQL 中,如果你尝试插入一条记录,其主键(或唯一约束字段)与已有记录的主键相同,会根据不同的操作方式产生不同的结果。以下是常见情况及其处理方式:

1. 使用 INSERT 语句

如果你使用标准的 INSERT 语句并尝试插入一条记录,但其主键与已存在的记录冲突,会出现错误,通常是类似以下的错误信息:

ERROR 1062 (23000): Duplicate entry 'xxx' for key 'PRIMARY'
  • 主键冲突:MySQL 会抛出一个错误,导致插入操作失败。
  • 解决方式:可以使用其他方式来处理冲突(如 INSERT IGNOREREPLACE INTOON DUPLICATE KEY UPDATE)。

2. 使用 INSERT IGNORE

INSERT IGNORE 会在插入数据时忽略冲突,不会抛出错误。如果主键或唯一约束字段发生冲突,MySQL 会自动忽略这条记录,而不是插入。

INSERT IGNORE INTO table_name (id, name) VALUES (1, 'Alice');
  • 如果 id = 1 的记录已经存在,则不会插入新记录,并且不会抛出错误。
  • 如果 id = 1 的记录不存在,则会插入该记录。

### 3. **使用 REPLACE INTO**

REPLACE INTO 在插入新记录时,如果遇到相同的主键或唯一键,它会先删除已存在的记录,然后插入新的记录。因此,相当于删除旧记录并插入新记录。

REPLACE INTO table_name (id, name) VALUES (1, 'Alice');
  • 如果 id = 1 的记录存在,MySQL 会删除旧记录并插入新的记录。
  • 如果 id = 1 的记录不存在,则直接插入新记录。

4. 使用 ON DUPLICATE KEY UPDATE

ON DUPLICATE KEY UPDATE 允许在插入时检查主键或唯一约束冲突,如果发现冲突,则更新现有记录的某些字段,而不是插入新记录。

INSERT INTO table_name (id, name) VALUES (1, 'Alice')
ON DUPLICATE KEY UPDATE name = VALUES(name);
  • 如果 id = 1 的记录存在,name 字段会被更新为 Alice
  • 如果 id = 1 的记录不存在,则插入新记录。

5. 总结

  • INSERT:如果主键冲突,插入会失败并抛出错误。
  • INSERT IGNORE:如果主键冲突,插入会被忽略,不会抛出错误。
  • REPLACE INTO:如果主键冲突,会删除已有记录并插入新记录。
  • ON DUPLICATE KEY UPDATE:如果主键冲突,会更新现有记录。

根据具体的业务需求来选择使用

标签:INSERT,name,记录,主键,插入,MYSQL,id
From: https://www.cnblogs.com/ltfxy/p/18626654

相关文章

  • mysql语句
    常用语句--检查并删除已存在的数据库DROPDATABASEIFEXISTS`date_time_test`;--创建数据库CREATEDATABASE`date_time_test`;--使用新创建的数据库USE`date_time_test`;--检查并删除已存在的表DROPTABLEIFEXISTSsales_orders;--创建表CREATETABLEsales_order......
  • php+html+mysql实现购物商城在线购物系统零食购物系统计算机源码获取php+mysql电子商
     一.功能介绍用户前台功能:前台主要包括网站首页、今日特卖、限时打折、商品中心、常见问题、我的购物车、登录、注册、商品详情,联系卖家,加入购物车、结算、个人中心等功能模块。今日特卖、限时打折、商品中心模块,用户可以查看全部商品信息,选择商品进行添加购物车等操作;购......
  • MySQL 触发器通过示例进行解释:自动化数据库操作
    什么是MySQL触发器?触发器是与表相关的数据库对象,当对表执行特定的操作(如INSERT、UPDATE、DELETE)时,触发器会自动执行。它就像是一个在后台默默工作的“小机器人”,一旦监听到指定的事件发生,就会按照预先定义的规则进行操作。创建一个简单的INSERT触发器示例假设我们有两......
  • MySQL字符集和优化
    MySQL字符集和优化MySQL字符集字符集介绍字符(Character)是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。字符集(Characterset)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同。常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、G......
  • MySQL主从架构
    MySQL主从架构MySQL主从架构(Master-SlaveArchitecture)是一种常见的数据库高可用性和负载均衡的设计模式,通常用于提高系统的可伸缩性和可靠性。它基于数据复制(replication)机制,其中“主”服务器负责处理所有的写操作,而“从”服务器则通过复制主服务器的数据来保持数据一致性,主要用......
  • mysql explain 结果的extra字段解析
    usingindex:sql语句没有where查询条件,使用覆盖索引,不需要回表查询即可拿到结果usingwhere:没有使用索引/使用了索引但需要回表查询且没有使用到下推索引usingindex&&useingwhere:sql语句有where查询条件,且使用覆盖索引,不需要回表查询即可拿到结果。Usingindexcon......
  • Djagno 执行mysql
    https://blog.csdn.net/wglink/article/details/127998343一、增#增definsert_data(name,category,price,quantity):withconnection.cursor()ascursor:sql="insertintogoods(name,category,price,quantity)values(%s,%s,%s,%s)"......
  • ORACLE sql查询用户/表/数据/外键/主键/索引
    查询用户数量--查询用户数量SELECTCOUNT(*)ASuser_countFROMDBA_USERS;查询表数量--查询表数量SELECTOWNER,COUNT(*)AStable_countFROMDBA_TABLESWHEREOWNERIN('RBCC_ICO_ADMIN','DPDB_CONFIDENTIAL','DPDB_INTERNAL')GROUPBYOWNER;......
  • 数据结构与算法 - 排序 #直接插入排序 #希尔排序 #直接选择排序 #堆排序 #冒泡排序 #
    文章目录前言一、插入排序(一)、直接插入排序1、思路2、参考代码:3、复杂度计算:(二)、希尔排序1、思路2、参考代码:3、时间复杂度计算:二、选择排序(一)、直接选择排序1、思路2、参考代码3、时间复杂度计算(二)、堆排序三、交换排序(一)、冒泡排序(二)、快速......
  • Python企业公寓后勤管理系统(Pycharm Flask Django Vue mysql)
    文章目录项目介绍和开发技术介绍具体实现截图开发技术开发与测试:设计思路系统测试可行性分析核心代码部分展示文章目录/写作提纲参考源码/演示视频获取方式项目介绍和开发技术介绍论文主要是对后勤管理系统进行了介绍,包括研究的现状,还有涉及的开发背景,然后还对系统......