Java JDBC插入到-主键错误
当我从下面执行代码时,一切正常,但我的主键应该设置为2,但它跳到了6,db看起来像id 1,下一个是6。我从这个数据库中删除了前几行,我很确定这就是问题所在。看起来所有内容都已删除,但仍有一些内容保留在那里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
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重置为零。)