MySQL为什么我的自动递增在执行插入时不是从1开始? [英] MySQL why does my auto increment not start at 1 when doing inserts?

查看:0
本文介绍了MySQL为什么我的自动递增在执行插入时不是从1开始?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

为什么当我使用JDBC在数据库中执行插入操作时,我的表AUTO_INCRENTIONS会被抬高。

填充完全空表的示例:

狗桌

DogId DogName
3     Woofer
4     Kujo
5     Spike

所有者表

OwnerId DogID OwnerName
6       3     George
7       4     John
8       5     Sam

预期结果

狗桌

DogId DogName
1     Woofer
2     Kujo
3     Spike

所有者表

OwnerId DogID OwnerName
1       1     George
2       2     John
3       3     Sam

实际代码:

 public void insertStuff(Something d)
  {
    Connection con = null;

    try
    {
      Class.forName("com.mysql.jdbc.Driver");
      con = (Connection) DriverManager.getConnection(
          "jdbc:mysql://" + this.getServer() + "/" + this.getDatabase(), user,
          password);
      con.setAutoCommit(false);

      Statement s1 = (Statement) con.createStatement();
      s1.executeUpdate("INSERT IGNORE INTO DOG (DOG_NAME) VALUES(""
          + d.getDogName() + "")");

      Statement s2 = (Statement) con.createStatement();
      s2.executeUpdate("INSERT IGNORE INTO OWNER (DOG_ID,OWNER_TITLE) VALUES ("
          + "(SELECT DOG_ID FROM DEVICE WHERE DOG_NAME =""
          + d.getDogName()
          + ""),"" + d.getOWNER() + "")");

      Statement s3 = (Statement) con.createStatement();
      s3.executeUpdate("INSERT IGNORE INTO KENNEL " + "("
          + "KENNEL_NAME,+ "OWNER_ID) " + "VALUES " + "( ""
          + d.getKennelName()
          + "","
          + """
          + ","
          + "(SELECT OWNER_ID FROM OWNER WHERE OWNER_TITLE=""
          + d.getOWNER() + "")" + ")");

      }

      con.commit();

    }
    catch (Exception e)
    {
      if (con != null)
        try
        {
          con.rollback();
        }
        catch (SQLException e1)
        {
          // TODO Auto-generated catch block
          e1.printStackTrace();
        }

      e.printStackTrace();
    }
    finally
    {
      if (con != null)
        try
        {
          con.close();
        }
        catch (SQLException e)
        {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
    }
  }

推荐答案

我只知道两种情况:

(1)某些记录已被删除

(2)表上有一些修改此类ID的触发器

请注意,即使您对空表进行了新的插入,如果以前有一些行,清空表时也不会重置自动递增ID计数器,并且它会从最后发出的编号开始按顺序继续,而不是从表中的实际记录数继续...

这篇关于MySQL为什么我的自动递增在执行插入时不是从1开始?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆