Java JDBC插入到-主键错误

Java JDBC插入到-主键错误,java,mysql,sql,jdbc,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.s

当我从下面执行代码时,一切正常,但我的主键应该设置为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)");

请提供帮助。

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

但是,如果您想填补这些空白(不建议这样做),则必须手动进行如下更改:

ALTER TABLE [yourtablename] AUTO_INCREMENT = 1

因此,这将根据表中现有的最高值将自动增量值重置为下一个值。

主键是自动增量的,如果从表中删除行,则下一个条目将来自上一个主键id,而不是表中存在的上一个主键id。这就是它的工作方式

但是,如果您想填补这些空白(不建议这样做),则必须手动进行如下更改:

ALTER TABLE [yourtablename] AUTO_INCREMENT = 1

因此,这将根据表中现有的最高值将自动增量值重置为下一个值。

预期行为是为每个记录增加一个序列。当您删除任何行或截断表(对于Postgres)时,这并不意味着序列将从起始值开始,它只是从最后一个值继续,并按因子递增

以这个序列为例

         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
现在,我删除行并在
主键上添加两行默认值

在此之后,最后一个_值的系数将增加2


last_value | bigint | 9

预期行为是为每个记录增加一个序列。当您删除任何行或截断表(对于Postgres)时,这并不意味着序列将从起始值开始,它只是从最后一个值继续,并按
因子递增

以这个序列为例

         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
现在,我删除行并在
主键上添加两行默认值

在此之后,最后一个_值的系数将增加2


last|u value | bigint | 9

键仅向前自动递增,它们不会重复使用已分配的键,如果删除任何数据,这是正常的。分配的密钥仍将存在。除非使用
truncate
整个tableKeys仅向前自动递增,否则它们不会倾向于重复使用已分配的键,如果删除任何数据,则会出现这种情况。分配的密钥仍将存在。除非您使用
truncate
否则整个tableMySQL文档都会说:当使用快速截断时,它会将任何自动增量计数器重置为零。从MySQL 5.0.13开始,自动增量计数器通过TRUNCATE TABLE重置为零,无论是否存在外键约束。)MySQL文档说明:当使用快速截断时,它会将任何自动增量计数器重置为零。从MySQL 5.0.13开始,无论是否存在外键约束,自动增量计数器都会通过TRUNCATE TABLE重置为零。)