今天听同事介绍oracle到mysql的数据migration,他用了Insert into ..... on duplicate key update ...,我当时就想怎么不用Replace呢,于是回来就仔细查了下,它们果然还是有区别的 MySQL中的`REPLACE INTO`和`INSERT INTO ... ON DUPLICATE KEY UPDATE`是两种处理数据冲突的方法,它们在处理已有键值冲突时的行为有所不同。这两种语句都是在插入新记录时,如果发现存在相同的唯一键值,则采取不同的策略。 1. `REPLACE INTO`: - 当尝试插入的记录的唯一键值与表中已有的记录相同时,`REPLACE INTO`会首先删除已存在的记录。 - 随后,新记录会被插入,即使新记录中的其他字段为空或未指定,也会将这些字段设置为默认值。 - 在这个过程中,对于具有`AUTO_INCREMENT`属性的主键,`REPLACE INTO`会递增主键的值,即使主键只是因为冲突而被删除并重新插入。 - 示例中,当`a=2`的记录被`REPLACE`时,原有的`c`字段被替换为空,相当于删除了旧记录并插入了一个新记录,导致`AUTO_INCREMENT`的`a`字段值增加,新的自增值从4跳到了5。 2. `INSERT INTO ... ON DUPLICATE KEY UPDATE`: - 这个语句在遇到唯一键冲突时,不会删除原有记录,而是更新已存在的记录。 - 当指定`ON DUPLICATE KEY UPDATE`时,只有在出现唯一键冲突时才会执行`UPDATE`部分的语句,更新冲突记录的指定字段。 - 示例中,当再次尝试`INSERT`一个`a=3`的记录时,由于`b`字段在`ON DUPLICATE KEY UPDATE`部分被指定更新为'r5',所以原有记录的`b`字段被更新,而`c`字段保持不变。 - 对于`AUTO_INCREMENT`字段,`INSERT INTO ... ON DUPLICATE KEY UPDATE`不会改变其值,因为并没有删除原有记录,所以不会递增`AUTO_INCREMENT`。 总结来说,`REPLACE INTO`更适合于希望完全替换冲突记录的场景,而`INSERT INTO ... ON DUPLICATE KEY UPDATE`则允许在保留原有记录的基础上,仅更新指定字段。这两种方法在处理数据冲突时的逻辑差异,使得它们在不同的业务需求下有着各自的适用性。在进行数据迁移或批量导入时,根据具体的数据完整性和一致性要求选择合适的方法至关重要。



























- 粉丝: 4
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- (源码)基于Python和Neo4j的智能就医系统.zip
- 监控专用网络EPON系统测试方案.doc
- Comsol与Matlab联合仿真及模型参数优化:以燃料电池流道优化为例
- 基于JAVA的餐饮管理系统毕业论文1.doc
- (源码)基于Arduino的生物机械手控制系统.zip
- 基于DSP的电机控制技术研究:无刷直流伺服电机的数学模型与控制策略实现
- COMSOL热-流-固三场耦合模拟煤层气藏注CO2开发及CCUS应用 - COMSOL 教程
- (源码)基于ROS的机器人感知与控制项目.zip
- 基于C#与西门子PLC的工控数据采集系统实战源码及精美UI ScottPlot 全面版
- (源码)基于Arduino UNO和TensorFlowKeras的MNIST手写数字快速分类系统.zip
- 三相PWM整流电路的双闭环控制与Simulink仿真实现及应用 - PWM调制
- (源码)基于Python和LightGBM的视频留存预测系统.zip
- 基于Carsim2020.0与Matlab Simulink2018b的7自由度车辆动力学模型联合仿真验证
- MATLAB Simulink中线性分组码BCH与卷积码的工程实现及误码率分析
- (源码)基于嵌入式C语言的LED矩阵贪吃蛇游戏.zip
- MATLAB频散曲线绘制软件:圆柱、圆环导波问题求解工具 - GUI界面



评论0