JDBC INSERT INTO - 错误的主键

时间:2015-04-16 07:38:14

标签: java mysql sql jdbc

当我从下面执行代码时,一切都很好,但我的主键应设置为2,但它跳转到6,db看起来像id 1,接下来是6.我删除此数据库中的几行之前我很确定那就是问题所在。看起来所有东西都已被删除,但仍然留在那里。

con = DriverManager.getConnection("jdbc:mysql://localhost:3306/","root","");
stat = con.createStatement();
stat.executeUpdate("INSERT INTO money.state (bank,wallet) VALUES (200,400)");

请帮忙。

2 个答案:

答案 0 :(得分:3)

主键是自动递增的,如果从表中删除行,则下一个条目将来自最后一个主键ID,该ID不是从表中存在的最后一个主键中删除的。这就是它的工作方式。

如果你想填补空白(不推荐),那么你必须手动进行如下修改:

ALTER TABLE [yourtablename] AUTO_INCREMENT = 1

因此,这会根据表中现有的最高值将auto_increment值重置为下一个值。

答案 1 :(得分:2)

预期的行为是为每条记录增加一个序列。当你删除任何行或截断表格(对于Postgres)时,它并不意味着序列将从起始值开始,它只是从最后一个值继续并将其递增{ {1}}因素。

将此序列视为示例

increment_by

现在,我删除行并在 Sequence "public.test_a_seq" Column | Type | Value ---------------+---------+--------------------- sequence_name | name | test_a_seq last_value | bigint | 7 start_value | bigint | 1 increment_by | bigint | 1 max_value | bigint | 9223372036854775807 min_value | bigint | 1 cache_value | bigint | 1 log_cnt | bigint | 26 is_cycled | boolean | f is_called | boolean | t

上添加两行默认值

之后,last_value因子会增加2。

PRIMARY KEY