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

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

WBOY
WBOYOriginal
2016-06-07 15:27:271139Durchsuche

mysql 插入数据失败防止自增长主键增长的方法 mysql设置了自增长主键ID,插入失败的那个自增长ID也加一的,比如失败5个,下一个成功的不是在原来最后成功数据加1,而是直接变成加6了,失败次数一次就自动增长1了,能不能让失败的不增长的? 或者说mysql插入

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

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插入。

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

===============================================================

Mysql主键插入时有值将不使用自增可用程序控制
mysql设置了自增长主键ID,插入失败的那个自增长ID也加一的,比如失败5个,下一个成功的不是在原来最后成功数据加1,而是直接变成加6了,失败次数一次就自动增长1了,能不能让失败的不增长用程序自由控制?

方法/步骤
1
Mysql主键如果在insert插入时有值,将不使用自增。也就是说插入数据的时候只要自己把ID加上就按照插入的数进行自增了,这个数通过自己的逻辑判断代码来赋值,只要ID不重复就可以了。例如:
String sql = "insert ignore into mytable(id,number,opendate) values(?,?,?)";
new Object[] {id,number,opendate});
用程序控制输入的ID就做到可以自由控制了。

来自本人 Mysql主键插入时有值将不使用自增可用程序控制_百度经验
http://jingyan.baidu.com/article/48206aeae55922216ad6b384.html 


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn