insert时出现主键冲突的处理方法【转载】
原文出处: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时出现主键冲突的处理方法【转载】相关推荐
- sqoop从hive导入数据到mysql时出现主键冲突
今天在将一个hive数仓表导出到mysql数据库时出现进度条一直维持在95%一段时间后提示失败的情况,搞了好久才解决.使用的环境是HUE中的Oozie的workflow任何调用sqoop命令,该死的o ...
- mysql 主从,主主,主主复制时的主键冲突解决
原理:slave 的i/o thread ,不断的去master抓取 bin_log, 写入到本地relay_log 然后sql thread不断的更新slave的数据 把主服务器所有的数据复制给从服 ...
- 使用mybatis插入数据(insert)时返回主键的问题
使用mybatis做插入操作时,想要获取新增记录的主键,我发现现在的方式和以前的方式有所区别,即以前是直接通过方法返回,现在是将主键设置在数据实体对象中. 下面对mybatis进行insert时返回主 ...
- mysql插入报主键冲突,解决方法主键索引重新排序
mysql插入报主键冲突,解决方法主键索引重新排序 参考文章: (1)mysql插入报主键冲突,解决方法主键索引重新排序 (2)https://www.cnblogs.com/nizuimeiabc1 ...
- mysql insert 主键冲突_insert 时防止出现主键冲突错误的方法
最近几天,产品上线比较多,从内网测试库导出表的部分内容到线上也就比平时频繁多了,这时候可能会出现主键冲突: Error Code : 1062 Duplicate entry '1' for key ...
- django使用postgresql时提示主键冲突
在django使用postgresql数据库时,当你使用默认主键,但当你手动使用添加记录到相关数据库时(非insert操作,如使用navicate直接在表中复制粘贴记录),此时django在插入数据时 ...
- 批量插入数据表数据时,主键冲突的解决
2.使用普通的insert into on conflict合并写入,存在写入放大思路: 大量数据,批量插入到数据表中时,很容易造成主键冲突,重复数据有唯一约束插入不进去表中,报错的问题出现. 排查错 ...
- UPDATE 时主键冲突引发的思考
作/译者:叶金荣(Email: ),来源:http://imysql.cn,转载请注明作/译者和出处,并且不能用于商业用途,违者必究. 假设有一个表,结构如下: mysql> CREATE TA ...
- [原创]游戏合服时如何避免主键冲突
目录 背景 合服处理 防止主键冲突 合服时处理冲突 开服时预分配防止后续冲突 字段顺序不一致 背景 滚服类型的游戏常见于 手游.网游(包括H5), 滚服类型游戏的特点(与传统大服架构区别): 单服同时 ...
最新文章
- 运行webpack命令每次提示安装webpack-cli
- c mvc ajax请求,springMVC的ajax请求
- Android4.0源码Launcher启动流程分析【android源码Launcher系列一】
- 申请Windows2008R2学生key
- MySQL——开窗函数
- 10 个非常有用的 AngularJS 框架
- 【NOIp 2015】【DFS】斗地主
- 东八区转为0时区_格林尼治时间转换为北京时间
- 技巧 | 数据有缺失值情况下的一个处理方法
- 想成为一个高效的Web开发者吗?来看看大牛分享的经验吧
- 单片机c语言入门自学,单片机C语言入门教程
- 信天翁水域雷达监视系统
- python处理access数据库教程_Python操作Access数据库基本步骤分析
- 上海瀚示中文彩显拣货标签 智能仓储物流工匠级革新
- VS2013创建Windows服务 || VS2015+Windows服务简易教程
- Zerotier和NoMachine 开机启动设置
- 【嵌入式模块】OLED显示屏模块
- 支持向量机_4:Outliers
- Win10卸载CUDA 10.2
- 在虚拟机中搭建设zookeeper集群配置
热门文章
- Docker问题:Dockerfile的From之前不能使用ARG
- 2018年测试状况调查
- HTTP Status 500 - An exception occurred processing JSP page /common/../left.jsp at line 20
- 【虚拟化】支持IDE/SATA/SCSI
- 使用 IntraWeb (35) - TIWJQueryWidget
- 计算机等级考试绝对应用,96年4月至210年全国计算机等级考试绝对全收集.docx
- js滤镜灰度计算_案例分享爱奇艺边缘计算探索与实践
- Linux软件 github,Linux下使用GitHub记
- Android实现蝴蝶动画,蝴蝶飞舞- (补间动画+逐帧动画)
- gps测速仪手机版下载_银豹收银系统手机版下载-银豹收银系统手机安卓版APP下载v2.0.1.2...