lealone / Lealone

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

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

Closed cbqqkcel closed 1 year ago

cbqqkcel commented 1 year ago

image image image image

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

cbqqkcel commented 1 year ago

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

codefollower commented 1 year ago

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

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

codefollower commented 1 year ago

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

cbqqkcel commented 1 year ago

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

image

cbqqkcel commented 1 year ago

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

codefollower commented 1 year 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 1 year ago

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

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

codefollower commented 1 year ago

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

cbqqkcel commented 1 year ago

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

好的谢谢

codefollower commented 1 year ago

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