繁体   English   中英

JDBC INSERT INTO-错误的主键

[英]JDBC INSERT INTO - wrong primary key

当我从下面一切都执行代码的时候,但是我的主键应该设置为2,但是它跳到6,db看起来像id 1,next是6。我从这个db删除几行之前,我很确定这是问题。 它看起来像所有内容都已删除,但仍然存在。

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

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

预期的行为是为每个记录增加一个序列。 当您删除任何行 或截断表(对于Postgres)时, 这并不意味着该序列将从起始值开始,而只是从最后一个值开始继续,并按increment_by因子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

现在,我删除行并在PRIMARY KEY上添加具有默认值的两行

之后,last_value的系数将增加2。

last_value | bigint | 9

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM