zoukankan      html  css  js  c++  java
  • 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插入。

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

  • 相关阅读:
    最近队伍训练记录20170926
    HDU5942 Just a Math Problem
    AC自动机+高斯消元 hdu 5955 Guessing the Dice Roll 16沈阳icpc
    [软件工程]软件工程的历史进程
    2017 Multi-University Training Contest
    A*B 原根+FFT优化
    莫比乌斯函数+莫比乌斯反演
    NTT板子 -- from ACdreamer -- test by HDU6061
    2017 Multi-University Training Contest
    将表单序列化成json对象
  • 原文地址:https://www.cnblogs.com/xionggeclub/p/6120622.html
Copyright © 2011-2022 走看看