本文介紹了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開始?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,