列ID的递增

时间:2018-07-04 19:23:49

标签: java mysql database database-connection

我有两种方法,一种用于将数据插入db,另一种用于删除它们。假设我添加了3行,它们分别具有id = 1,id = 2,id = 3。现在,我决定删除最后一个,然后再次插入1行。因此,我有三行ID为1,2,3的行,所以我得到了三行ID为1,2,4的行。我该如何解决?

 private void insert() throws SQLException {

    String query = "INSERT INTO users (username, email, password, user_group_id) VALUES (?, ?, ?, ?);";

 PreparedStatement sql = Boot.getCon().prepareStatement(query, Statement.RETURN_GENERATED_KEYS); 
    sql.setString(1, username);
    sql.setString(2, email);
    sql.setString(3, password);
    sql.setInt(4,user_group_id);
    sql.executeUpdate();

}

public static void delete(int id) throws SQLException {

    String query = "DELETE FROM users where id=?;";
    PreparedStatement statement = Boot.getCon().prepareStatement(query);
    statement.setInt(1,id);
    statement.executeUpdate();
    System.out.println("You have deleted 1 row");
}

3 个答案:

答案 0 :(得分:0)

首先这不是问题,这是AUTO_INCREMENT的工作方式... 如果您想修复它,那么您必须进行更多编码,如果您不懒惰和着迷,我可以告诉您一些想法。

从您的索引中删除AUTO_INCREMENT,创建一个名为ID的列,将其设置为INT类型,然后您就需要创建一个类似的函数:

private int returnLastID(){
//Make your Connection to the database things here.
String query="SELECT ID FROM table_name ORDER BY ID DESC LIMIT 1";
//prepare your statement into the resultset variable then simply return it.
return resultSet.getInt("ID");
}

就像每次插入新记录一样,只需调用此函数并对其进行+1。 希望你喜欢它。

答案 1 :(得分:0)

这似乎不是问题,这是预期的行为。您的代码很好。

我相信您在后台使用一些序列来分配ID。每次插入时,序列值都会增加1。

如果您删除任何行,则该ID将不会再次使用。

答案 2 :(得分:0)

在数据库中删除永久性文件时,请确保在身份种子中创建空白。 解决方案通常使用已删除的标志,即1 =已删除。如果您不愿意创建空白(出于合规原因),请考虑更新已删除的列,而不是硬删除。

可以使用以下查询更改身份种子:

SELECT LAST_INSERT_ID(); SET IDENTITY = 4;

身份种子是递增的,将身份种子设置为低于最大值将不起作用。