java—列id的增量

alen0pnh  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(289)

我有两种方法,一种是将数据插入数据库,另一种是删除它们。假设我添加了3行id=1,id=2,id=3。现在我决定删除最后一行,再插入一行。因此,我得到了三行ids为1,2,4,而不是三行ids为1,2,3。我怎样才能解决这个问题?

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");
}
f45qwnt8

f45qwnt81#

当您删除数据库中的永久性时,您将确保在您的标识种子中创建间隙。解决方案通常使用已删除标志,1=已删除。如果您不能创建间隙(合规性原因),请考虑更新已删除的列,而不是硬删除。
可以使用以下查询更改标识种子:
选择最后一个插入id();  设置标识=4;
标识种子是增量的,将标识种子设置为低于最大值将不起作用。

1rhkuytd

1rhkuytd2#

这本来就不是问题,这就是自动增量的工作原理。。。如果你想解决它,那么你必须做一些更多的编码,我可以告诉你一些想法,如果你不懒惰和兴趣。
从索引中删除自动增量,生成一个名为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。希望你喜欢。

pinkon5k

pinkon5k3#

这看起来不是问题,这是预期的行为。你的密码很好。
我相信你在后台使用了一些序列来分配ID。每次插入时,序列值将递增1。
如果删除任何行,该id将不会再次使用。

相关问题