MySQL使用经验——在批量插入数据时如果跳过主键重复的数据,从而不影响其它数据的插入
分类:计算机 | 数据库 | MySQL | 数据导入导出 1519
更新:2021-08-24 00:03:30编辑
说明
有时候我们在mysql中执行一个sql脚本批量插入数据的操作时中途出现了一些意外导致插入操作终止了,这个时候可能已经插入了一部分数据,而且我们也不知道具体插入了哪一部分的数据;如果我们直接再次执行sql脚本的话必然会出现主键重复的错误,导致其它数据也不能正常地插入数据库,我们可以通过下面的方法来解决这个问题。
方法1——使用关键字ignore
示例:
INSERT IGNORE INTO `sys_dic` (`ID`, `PARENTID`, `NAME`, `ALIASNAME`, `SORT`, `REMARK`, `CODE`) VALUES ('019731e9-5e66-4c4c-954d-4adbc427ddcc', 'badd7347-d409-4f9c-91a5-61160b365d9b', '1:20000', NULL, '7', '', '111008');
说明:ignore关键字的作用就是在插入时会检索主键列表,如存在相同主键记录,不更改原纪录,只插入新的记录。
ignore关键字所修饰的SQL语句执行后,在遇到主键冲突时会返回一个0,代表并没有插入此条数据。如果主键是由后台生成的(如uuid),我们可以通过判断这个返回值是否为0来判断主键是否有冲突,从而重新生成新的主键key。
方法2——使用关键字replace
示例:
REPLACE INTO `sys_dic` (`ID`, `PARENTID`, `NAME`, `ALIASNAME`, `SORT`, `REMARK`, `CODE`) VALUES ('019731e9-5e66-4c4c-954d-4adbc427ddcc', 'badd7347-d409-4f9c-91a5-61160b365d9b', '1:20000', NULL, '7', '', '111008');
说明:插入时如发现主键已经存在,则替换原记录,即先删除原记录,后插入新的记录。
方法3——on duplicate key update
示例:
INSERT INTO `sys_dic` (`ID`, `PARENTID`, `NAME`, `ALIASNAME`, `SORT`, `REMARK`, `CODE`) VALUES ('019731e9-5e66-4c4c-954d-4adbc427ddcc', 'badd7347-d409-4f9c-91a5-61160b365d9b', '1:20000', NULL, '7', '', '111008') on duplicate key update code='111';
说明:插入时如果发现主键已存在,则对字段code进行更新操作。
猿导航
阅读排行榜
- 1vue和el-table使用经验-如何刷新表格数据10889
- 2three.js加载3D瓦片和3dtiles数据生成交互式地图的开源项目9453
- 3Microsoft Visual C++ Redistributable是什么,有什么作用?7183
- 4mybatis使用经验——mybatis-spring-boot-starter和mybatis的版本对应关系表(持续更新~)5761
- 5uni-app使用经验—vue页面和html页面如何互相调用接口并传参5438
- 6Spring学习经验—@ResponseBody注解的使用说明4847
- 7Intellij IDEA下的版本控制VCS的启用与关闭4793
- 8Druid异常解决经验—java.sql.SQLException url not set4467
- 9如何用批处理命令(bat脚本)启动和停止windows服务4232
- 10nuxt.js项目中如何添加和使用全局变量4099
- 11解决SpringBoot使用maven下载不了jar包的问题3453
- 12linux中解压tar.gz文件报错“gzip: stdin: invalid compressed data--format violated”3347
- 13nuxtjs asyncData使用经验—如何发起多个axios请求并携带参数3207
- 14在Nuxt.js项目的head中引用外部js文件3044
- 15在NVIDIA控制面板设置参数时提示“拒绝访问 无法应用选定的设置到您的系统”的解决方法之一3022