mysql 插入数据失败防止自增长主键增长的方法-阿里云开发者社区

开发者社区> 熊哥club> 正文

mysql 插入数据失败防止自增长主键增长的方法

简介: mysql设置了自增长主键ID,插入失败的那个自增长ID也加一的,比如失败5个,下一个成功的不是在原来最后成功数据加1,而是直接变成加6了,失败次数一次就自动增长1了,能不能让失败的不增长的? 或者说mysql插入数据失败,怎么能防止主键增长? MYSQL不保证AUTO_INCREMENT依次增长(1,2,3,4,5),但是可以保证正向增长(1,3,5,9)所以,当你某次操作失败后,下次A
+关注继续查看
mysql设置了自增长主键ID,插入失败的那个自增长ID也加一的,比如失败5个,下一个成功的不是在原来最后成功数据加1,而是直接变成加6了,失败次数一次就自动增长1了,能不能让失败的不增长的?

或者说mysql插入数据失败,怎么能防止主键增长?

MYSQL不保证AUTO_INCREMENT依次增长(1,2,3,4,5),但是可以保证正向增长(1,3,5,9)所以,当你某次操作失败后,下次AUTO_INCREMENT就不是顺序的了。

innodb的自增是缓存在内存字典中的,分配方式是先预留,然后再插入的。所以插入失败不会回滚内存字典。让innodb识别到当前最大id的方法是重启server 更新AUTO_INCREMENT缓存,或者用alter table `表` AUTO_INCREMENT = 最大数;  

这种思路基本不实用,下面介绍一种方便的方法。

Mysql主键如果在insert插入时有值,将不使用自增。也就是说插入数据的时候只要自己把ID加上就按照插入的数进行自增了,这个数通过自己的逻辑判断代码来赋值,只要ID不重复就可以了。例如:

String sql = "insert ignore into mytable(id,number,opendate) values(?,?,?)";

new Object[] {id,number,opendate});

另外一个保证的方法就是每次插入前查询最大ID,然后加1再作为ID插入。

当然还有通过临时表的方式来保证最终插入的都是成功的,不过比较麻烦了。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
API浏览器数据查询失败问题的解决
由于API浏览器是针对VB而开发的,所以数据库采用的DAO,但是随着API浏览器的升级,不仅支持VB本身,也提供VB.net,C#API的查询,甚而是一些E文不太好的朋友,在开发VC程序时,也看一下API的中文说明。
441 0
MySQL 中两张表主键自增时,Java 后端组成树形结构的解决办法
当需要将两张不同表的数据进行合并处理,并且两张表的主键均为自增,主键同是数字。这时候需要区分的、不同的表进行取值,可以使其中一张表的主键为负数,即-1,-2,-3。 当需要把取出来的两张表分别再存进数据库时,要将之前取值是负数的主键转为正数,而转为正数的方式也很简单,也就是负负得正,即(-(...
1154 0
将DataTable 数据插入 SQL SERVER 数据库
原文: 将DataTable 数据插入 SQL SERVER 数据库 以下提供3中方式将DataTable中的数据插入到SQL SERVER 数据库: 一:使用sqlcommand.
886 0
PowerDesigner连接Oracle数据库建表序列号实现自动增长
原文:PowerDesigner连接Oracle数据库建表序列号实现自动增长 创建表就不说了。下面开始介绍设置自动增长列。  1 在表视图的列上创建。双击表视图,打开table properties ———>columens ,双击要设置的列(显示列的序号的那个按钮,单击后,会显示横向的黑色箭头)。
982 0
SQL Server插入中文数据后出现乱码
原文:SQL Server插入中文数据后出现乱码 今天在做项目的过程中遇到如标题的问题,情况如下图: 数据库使用的是SQL Server2012版本,创建表的脚本如下: CREATE TABLE [dbo].
804 0
+关注
熊哥club
java,前端相关专家
68
文章
4
问答
文章排行榜
最热
最新
相关电子书
更多
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载
《2021云上架构与运维峰会演讲合集》
立即下载