Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MySQL why does my auto increment not start at 1 when doing inserts?

Why when I'm using jdbc to do inserts into my data base my table auto_increments gets jacked-up.

Example Of totally empty tables being populated:

Dog table

DogId DogName
3     Woofer
4     Kujo
5     Spike

Owner Table

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

Desired Results

Dog table

DogId DogName
1     Woofer
2     Kujo
3     Spike

Owner Table

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

Actual code:

 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();
        }
    }
  }
like image 930
stackoverflow Avatar asked Dec 28 '22 03:12

stackoverflow


1 Answers

Auto-increment values can also be affected by inserting a row within a transaction, then backing out of the transaction.

You can always reset the auto_increment value on mysql directly:

alter table <tablename> auto_increment = <some_number>;

But honestly, what does it matter? The values need to be unique, but they shouldn't indicate an order.

like image 51
Matt Fenwick Avatar answered Jan 31 '23 06:01

Matt Fenwick