原文出处:http://hi.baidu.com/ytjwt/blog/item/1ccc2c26022b0608908f9d8c.html

使用"insert into"语句进行数据库操作时可能遇到主键冲突,用户需要根据应用场景进行忽略或者覆盖等操作。总结下,有三种解决方案来避免出错。

1. insert ignore into
遇主键冲突,保持原纪录,忽略新插入的记录。
mysql> select * from device ;
+-------+--------+-------------+
| devid | status | spec_char   |
+-------+--------+-------------+
|     1 | dead   | zhonghuaren | 
|     2 | dead   | zhong       | 
+-------+--------+-------------+
2 rows in set (0.00 sec)

mysql> insert into device values (1,'alive','yangting');
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

mysql> insert ignore  into device values (1,'alive','yangting');
Query OK, 0 rows affected (0.00 sec)

mysql> select * from device ;
+-------+--------+-------------+
| devid | status | spec_char   |
+-------+--------+-------------+
|     1 | dead   | zhonghuaren | 
|     2 | dead   | zhong       | 
+-------+--------+-------------+
2 rows in set (0.00 sec)
可见 insert ignore  into当遇到主键冲突时,不更改原纪录,也不报错

2. replace into
遇主键冲突,替换原纪录,即先删除原纪录,后insert新纪录

mysql> replace  into device values (1,'alive','yangting');
Query OK, 2 rows affected (0.00 sec)

mysql> select * from device ;
+-------+--------+-----------+
| devid | status | spec_char |
+-------+--------+-----------+
|     1 | alive  | yangting  | 
|     2 | dead   | zhong     | 
+-------+--------+-----------+
2 rows in set (0.00 sec)

3. insert into ... ON DUPLICATE KEY UPDATE
其实这个是原本需要执行3条SQL语句(SELECT,INSERT,UPDATE),缩减为1条语句即可完成。

IF (SELECT * FROM where 存在) {
    UPDATE  SET  WHERE ;
} else {
    INSERT INTO;
}
如:mysql> insert into device values (1,'readonly','yang') ON DUPLICATE KEY UPDATE status ='drain';
Query OK, 2 rows affected (0.00 sec)

上面语句伪代码表示即为
if (select * from device where devid=1) { 
    update device set status ='drain' where devid=1 
} else {
    insert into device values (1,'readonly','yang')
}
很明显,devid=1  是有的,这样就执行update操作
mysql> select * from device ;
+-------+--------+-----------+
| devid | status | spec_char |
+-------+--------+-----------+
|     1 | drain  | yangting  | 
|     2 | dead   | zhong     | 
+-------+--------+-----------+
2 rows in set (0.00 sec)

测试表:
CREATE TABLE `device` (
`devid` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`status` enum('alive','dead','down','readonly','drain') DEFAULT NULL,
`spec_char` varchar(11) DEFAULT '0',
PRIMARY KEY (`devid`)
) ENGINE=InnoDB

转载于:https://www.cnblogs.com/DjangoBlog/p/3654382.html

insert时出现主键冲突的处理方法【转载】相关推荐

  1. sqoop从hive导入数据到mysql时出现主键冲突

    今天在将一个hive数仓表导出到mysql数据库时出现进度条一直维持在95%一段时间后提示失败的情况,搞了好久才解决.使用的环境是HUE中的Oozie的workflow任何调用sqoop命令,该死的o ...

  2. mysql 主从,主主,主主复制时的主键冲突解决

    原理:slave 的i/o thread ,不断的去master抓取 bin_log, 写入到本地relay_log 然后sql thread不断的更新slave的数据 把主服务器所有的数据复制给从服 ...

  3. 使用mybatis插入数据(insert)时返回主键的问题

    使用mybatis做插入操作时,想要获取新增记录的主键,我发现现在的方式和以前的方式有所区别,即以前是直接通过方法返回,现在是将主键设置在数据实体对象中. 下面对mybatis进行insert时返回主 ...

  4. mysql插入报主键冲突,解决方法主键索引重新排序

    mysql插入报主键冲突,解决方法主键索引重新排序 参考文章: (1)mysql插入报主键冲突,解决方法主键索引重新排序 (2)https://www.cnblogs.com/nizuimeiabc1 ...

  5. mysql insert 主键冲突_insert 时防止出现主键冲突错误的方法

    最近几天,产品上线比较多,从内网测试库导出表的部分内容到线上也就比平时频繁多了,这时候可能会出现主键冲突: Error Code : 1062 Duplicate entry '1' for key ...

  6. django使用postgresql时提示主键冲突

    在django使用postgresql数据库时,当你使用默认主键,但当你手动使用添加记录到相关数据库时(非insert操作,如使用navicate直接在表中复制粘贴记录),此时django在插入数据时 ...

  7. 批量插入数据表数据时,主键冲突的解决

    2.使用普通的insert into on conflict合并写入,存在写入放大思路: 大量数据,批量插入到数据表中时,很容易造成主键冲突,重复数据有唯一约束插入不进去表中,报错的问题出现. 排查错 ...

  8. UPDATE 时主键冲突引发的思考

    作/译者:叶金荣(Email: ),来源:http://imysql.cn,转载请注明作/译者和出处,并且不能用于商业用途,违者必究. 假设有一个表,结构如下: mysql> CREATE TA ...

  9. [原创]游戏合服时如何避免主键冲突

    目录 背景 合服处理 防止主键冲突 合服时处理冲突 开服时预分配防止后续冲突 字段顺序不一致 背景 滚服类型的游戏常见于 手游.网游(包括H5), 滚服类型游戏的特点(与传统大服架构区别): 单服同时 ...

最新文章

  1. 运行webpack命令每次提示安装webpack-cli
  2. c mvc ajax请求,springMVC的ajax请求
  3. Android4.0源码Launcher启动流程分析【android源码Launcher系列一】
  4. 申请Windows2008R2学生key
  5. MySQL——开窗函数
  6. 10 个非常有用的 AngularJS 框架
  7. 【NOIp 2015】【DFS】斗地主
  8. 东八区转为0时区_格林尼治时间转换为北京时间
  9. 技巧 | 数据有缺失值情况下的一个处理方法
  10. 想成为一个高效的Web开发者吗?来看看大牛分享的经验吧
  11. 单片机c语言入门自学,单片机C语言入门教程
  12. 信天翁水域雷达监视系统
  13. python处理access数据库教程_Python操作Access数据库基本步骤分析
  14. 上海瀚示中文彩显拣货标签 智能仓储物流工匠级革新
  15. VS2013创建Windows服务 || VS2015+Windows服务简易教程
  16. Zerotier和NoMachine 开机启动设置
  17. 【嵌入式模块】OLED显示屏模块
  18. 支持向量机_4:Outliers
  19. Win10卸载CUDA 10.2
  20. 在虚拟机中搭建设zookeeper集群配置

热门文章

  1. Docker问题:Dockerfile的From之前不能使用ARG
  2. 2018年测试状况调查
  3. HTTP Status 500 - An exception occurred processing JSP page /common/../left.jsp at line 20
  4. 【虚拟化】支持IDE/SATA/SCSI
  5. 使用 IntraWeb (35) - TIWJQueryWidget
  6. 计算机等级考试绝对应用,96年4月至210年全国计算机等级考试绝对全收集.docx
  7. js滤镜灰度计算_案例分享爱奇艺边缘计算探索与实践
  8. Linux软件 github,Linux下使用GitHub记
  9. Android实现蝴蝶动画,蝴蝶飞舞- (补间动画+逐帧动画)
  10. gps测速仪手机版下载_银豹收银系统手机版下载-银豹收银系统手机安卓版APP下载v2.0.1.2...