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

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 时防止出现主键冲突错误的方法相关推荐

  1. 物理DG主备库切换时遇到ORA-16139: media recovery required错误

    物理DG主备库切换时遇到ORA-16139: media recovery required错误 在物理DG主备库切换时遇到ORA-16139: media recovery required错误 S ...

  2. 解决win7和win8的64位系统安装NetAdvantage时总是提示%SystemDriver%inetpub\wwwroot错误的方法...

    解决win7和win8的64位系统安装NetAdvantage时总是提示%SystemDriver%inetpub\wwwroot错误的方法 最近公司需要用NetAdvantage控件,本机安装的是w ...

  3. 安装CAJViewer时遇到注册模块出现1904错误解决方法

    当安装CAj时遇到这们的错误 解决方法是到C:\Program Files (x86)\Common Files\TTKN\Bin 把这个目录下的内容都删除了:再安装使用. 问题解决成功安装成功

  4. 计算机键盘光标上下键失灵,输入时使用键盘上下键实现光标上下移动功能

    image.png 如图所示,在当前测试要求那一列,使用键盘上下键,实现光标上下移动功能: maxlength="50" type="text" :disabl ...

  5. Linux启动网卡时出现RTNETLINK answers: File exists错误解决方法

    一.问题描述 VMware中克隆虚拟机是经常的事情,虽然如此,用到虚拟机时,本人还是喜欢新安装一个操作系统,针对服务器的应用,在安装操作系统时,一并安装好,并且也花不了多少时间.但最近需要大量的配置一 ...

  6. 解决Visual C++ 编译器中混合 .c 文件时收到 C1853 预编译头错误的方法

    问题:用VC++编译器混合编译.c文件时,收到fatal error C1853:....预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反). 原因:当 Visua ...

  7. 学习VUE时,利用webpack打包的错误处理方法

    今天看哔哩哔哩Vue的课程时候遇到三个问题记录一下 1.安装webpack npm install webpack -g 新版需要同时安装 2.安装webpack-cli npm install -- ...

  8. ros 运行rviz时出现 QXcbConnection: XCB error: 148 错误 解决方法

    出现上述问题的原因: 1.由于使用了nvc远程控制下位机: 2.rviz是一个基于opengl开发的图形插件,需要使用理论的屏幕参数(thetis' screen),由于使用了teamviewer会导 ...

  9. win2008r2 64位解决Infragistics.NetAdvantage 安装时总是提示%SystemDriver%inetpub\wwwroot错误的方法

    来源地址:https://blog.csdn.net/haqer0825/article/details/7716181 error 1606: 1.打开注册表 Regist 2.找到HKEY_LOC ...

最新文章

  1. Java中常见数据结构Map之LinkedHashMap
  2. Android 开发之ViewPage官方文档学习笔记
  3. 1090 危险品装箱 (25 分)—PAT (Basic Level) Practice (中文)
  4. SNMP:简单网络管理协议(一)
  5. 2021-11-02 Kafka、Zookeeper的下载、打开、关闭
  6. 微信商户号进件接口,错误之 重新确认最终受益人字段
  7. 域策略(4)——设置统一锁屏壁纸(此策略仅适用于企业版、教育版和 Server SKU版)
  8. 零基础HTML入门教程(21)--表格
  9. 控制教程 —— 巡航控制篇:2.PID控制器设计
  10. Android实现支付宝AR功能,Android接入支付宝实现支付功能实例
  11. STM32中,单个字节按位取反后,不再是一个字节!
  12. Using the GNU Compiler Collection 目录翻译
  13. 《四叶游戏》:梦想执念·棒球1号位
  14. 电脑出现An operating system wasn‘t found,please to Ctrl+alt+del如何解决
  15. 基于MIMO的滤波器组多载波调制技术(后期将附上MATLAB代码)
  16. 2021海南高考成绩排名查询,海南高考排名查询方法,2021年海南高考成绩位次全省排名查询...
  17. Power bi 1.5连接Oracle
  18. ARM Linux下编译freetype、sdl、sdl_ttf
  19. 解决KEEL闪退问题
  20. 大数据专业适合考研吗? 1

热门文章

  1. nginx学习十 ngx_cycle_t 、ngx_connection_t 和ngx_listening_t
  2. http和socket之长连接和短连接区别
  3. Anaconda 安装 Tensorflow 教程
  4. Tensorflow的中文网站
  5. Move or commit them before Pull git
  6. Vue003_class 与style 绑定
  7. linux安装mysql详细过程【easy】
  8. easyUI tree 多选框设置是否级联选中
  9. Python文件操作中的a,a+,w,w+,rb+,rw+,ra+几种方式的区别
  10. 【Servlet】Tomcat公共 / 项目独立的 web.xml / server.xml 文件讲解