lealone / Lealone

比 MySQL 和 MongoDB 快10倍的 OLTP 关系数据库和文档数据库
Other
2.44k stars 514 forks source link

修改了SEQ后没有立即生效 #201

Closed cbqqkcel closed 12 months ago

cbqqkcel commented 12 months ago

image image image image

修改SEQ之后插入还是提示Unique index or primary key violation,需要手动设置一下ID值插入后,自动的才会生效

cbqqkcel commented 12 months ago

image 这是插入后的数据,之前的最大ID是1548。

codefollower commented 12 months ago

通过alter sequence语句修改sequence后产生新的版本,但是跟字段关联的sequence却是老版本,所以无法使用新修改的值

问题已修复,感谢报告bug。

codefollower commented 12 months ago

你是从哪里知道 (next value for myseq) 这种冷门的用法,并且用的还是 system 自动生成的内部 sequence。

cbqqkcel commented 12 months ago

你是从哪里知道 (next value for myseq) 这种冷门的用法,并且用的还是 system 自动生成的内部 sequence。

image

cbqqkcel commented 12 months ago

可以这样改SEQ吗 update INFORMATION_SCHEMA.SEQUENCES set CURRENT_VALUE = 1549 where SEQUENCE_NAME = 'SYSTEM_SEQUENCE_EE1F314E_25F9_4CAA_8E30_C2F8B83C8C69'

codefollower commented 12 months ago

不建议直接使用 system sequence

你可以这样使用: create sequence if not exists myseq; create table mytable(f1 int default (next value for myseq), f2 int);

修改 sequence 只能用 alter sequence myseq restart with 50

information_schema 表是只读的。

cbqqkcel commented 12 months ago

create table if not exists Seller ( id long auto_increment primary key, }

我创建表是这样的,然后用Datagrip查询出来的DDL是上面看到的那样子,会自动查询系统自己创建的SEQ

codefollower commented 12 months ago

auto_increment 就对应一个私有的 system sequence,设计的目的就是不能让应用插手。 私有 system sequence 的值是会自动根据 primary key 变化的。 如果现有 id 最大是10,然后你自己 insert 新记录时 id 是20,下一个 auto_increment 的 id 就是21了,删除现有记录时私有 system sequence 的值不受影响。

cbqqkcel commented 12 months ago

auto_increment 就对应一个私有的 system sequence,设计的目的就是不能让应用插手。 私有 system sequence 的值是会自动根据 primary key 变化的。 如果现有 id 最大是10,然后你自己 insert 新记录时 id 是20,下一个 auto_increment 的 id 就是21了,删除现有记录时私有 system sequence 的值不受影响。

好的谢谢

codefollower commented 12 months ago

我刚刚新提交了一个代码, 修改 system sequence 也可以用 ALTER SEQUENCE PUBLIC.SYSTEM_SEQUENCE_9AAF7419_A2BB_4D57_9337_D17693158F81 RESTART WITH 500; 新的值也会立刻生效。