mysql insert 主键冲突_insert 时防止出现主键冲突错误的方法
最近几天,产品上线比较多,从内网测试库导出表的部分内容到线上也就比平时频繁多了,这时候可能会出现主键冲突:
Error Code : 1062
Duplicate entry '1' for key 'PRIMARY'
总结下,三种解决方案来避免出错
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 ... 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
mysql insert 主键冲突_insert 时防止出现主键冲突错误的方法相关推荐
- 物理DG主备库切换时遇到ORA-16139: media recovery required错误
物理DG主备库切换时遇到ORA-16139: media recovery required错误 在物理DG主备库切换时遇到ORA-16139: media recovery required错误 S ...
- 解决win7和win8的64位系统安装NetAdvantage时总是提示%SystemDriver%inetpub\wwwroot错误的方法...
解决win7和win8的64位系统安装NetAdvantage时总是提示%SystemDriver%inetpub\wwwroot错误的方法 最近公司需要用NetAdvantage控件,本机安装的是w ...
- 安装CAJViewer时遇到注册模块出现1904错误解决方法
当安装CAj时遇到这们的错误 解决方法是到C:\Program Files (x86)\Common Files\TTKN\Bin 把这个目录下的内容都删除了:再安装使用. 问题解决成功安装成功
- 计算机键盘光标上下键失灵,输入时使用键盘上下键实现光标上下移动功能
image.png 如图所示,在当前测试要求那一列,使用键盘上下键,实现光标上下移动功能: maxlength="50" type="text" :disabl ...
- Linux启动网卡时出现RTNETLINK answers: File exists错误解决方法
一.问题描述 VMware中克隆虚拟机是经常的事情,虽然如此,用到虚拟机时,本人还是喜欢新安装一个操作系统,针对服务器的应用,在安装操作系统时,一并安装好,并且也花不了多少时间.但最近需要大量的配置一 ...
- 解决Visual C++ 编译器中混合 .c 文件时收到 C1853 预编译头错误的方法
问题:用VC++编译器混合编译.c文件时,收到fatal error C1853:....预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反). 原因:当 Visua ...
- 学习VUE时,利用webpack打包的错误处理方法
今天看哔哩哔哩Vue的课程时候遇到三个问题记录一下 1.安装webpack npm install webpack -g 新版需要同时安装 2.安装webpack-cli npm install -- ...
- ros 运行rviz时出现 QXcbConnection: XCB error: 148 错误 解决方法
出现上述问题的原因: 1.由于使用了nvc远程控制下位机: 2.rviz是一个基于opengl开发的图形插件,需要使用理论的屏幕参数(thetis' screen),由于使用了teamviewer会导 ...
- win2008r2 64位解决Infragistics.NetAdvantage 安装时总是提示%SystemDriver%inetpub\wwwroot错误的方法
来源地址:https://blog.csdn.net/haqer0825/article/details/7716181 error 1606: 1.打开注册表 Regist 2.找到HKEY_LOC ...
最新文章
- Java中常见数据结构Map之LinkedHashMap
- Android 开发之ViewPage官方文档学习笔记
- 1090 危险品装箱 (25 分)—PAT (Basic Level) Practice (中文)
- SNMP:简单网络管理协议(一)
- 2021-11-02 Kafka、Zookeeper的下载、打开、关闭
- 微信商户号进件接口,错误之 重新确认最终受益人字段
- 域策略(4)——设置统一锁屏壁纸(此策略仅适用于企业版、教育版和 Server SKU版)
- 零基础HTML入门教程(21)--表格
- 控制教程 —— 巡航控制篇:2.PID控制器设计
- Android实现支付宝AR功能,Android接入支付宝实现支付功能实例
- STM32中,单个字节按位取反后,不再是一个字节!
- Using the GNU Compiler Collection 目录翻译
- 《四叶游戏》:梦想执念·棒球1号位
- 电脑出现An operating system wasn‘t found,please to Ctrl+alt+del如何解决
- 基于MIMO的滤波器组多载波调制技术(后期将附上MATLAB代码)
- 2021海南高考成绩排名查询,海南高考排名查询方法,2021年海南高考成绩位次全省排名查询...
- Power bi 1.5连接Oracle
- ARM Linux下编译freetype、sdl、sdl_ttf
- 解决KEEL闪退问题
- 大数据专业适合考研吗? 1
热门文章
- nginx学习十 ngx_cycle_t 、ngx_connection_t 和ngx_listening_t
- http和socket之长连接和短连接区别
- Anaconda 安装 Tensorflow 教程
- Tensorflow的中文网站
- Move or commit them before Pull git
- Vue003_class 与style 绑定
- linux安装mysql详细过程【easy】
- easyUI tree 多选框设置是否级联选中
- Python文件操作中的a,a+,w,w+,rb+,rw+,ra+几种方式的区别
- 【Servlet】Tomcat公共 / 项目独立的 web.xml / server.xml 文件讲解