运行了很长时间后,我在id字段中得到越来越多的漏洞.一些表的id是int32,id序列达到了它的最大值.一些Java源代码是只读的,因此我不能简单地将id列类型更改为int32to long,这会破坏API.
我想重新编号.这可能不是一个好的做法,但好或坏并不关心这个问题.我想重新编号,特别是那些很长的ID,如"61789238","548273826529524324".我不知道它们为什么这么长,但更短的ID也更容易手动处理.
但由于引用和约束,手动压缩ID并不容易.
PostgreSQL本身是否支持ID重新编号?或者是否有任何插件或维护工具?
也许我可以写一些存储过程?那将是非常好的,所以我可以每年安排一次.
我试图使用一个表创建一对多的关系.这可能吗?
create table user(id int primary key auto_increment not null,
created_by int default null
)ENGINE=INNODB;
alter table user add foreign key (created_by) references user(id) ON DELETE SET NULL ON UPDATE CASCADE;
insert into user (id) VALUES(1);
insert into user (id, created_by) VALUES (2,1);
Run Code Online (Sandbox Code Playgroud)
现在,当我删除id = 1的用户时,created_by的值会自动变为NULL.
但是当我更改id = 1的用户的id时,我收到此错误
mysql> update user set id=2 where id=1;
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`jrt`.`user`, CONSTRAINT `user_ibfk_1` FOREIGN KEY (`created_by`) REFERENCES `user` (`id`) …Run Code Online (Sandbox Code Playgroud) 考虑到以下方案:

我们需要确保,如果关联被删除,那么属于该关联的所有狗也应该被删除.
但是,在执行此操作时,保持Association和Dog表之间实际存在的关系是有道理的,因为每个关联可以有几个Dogs,但是,一个Dog只属于一个Association.所以我相信外键配置是正确的.
我相信我应该在某处应用Cascade,但我没有看到.:(
请指教
我删除了表中的 2000 行,然后插入了相同的 2000 条记录,但它们的索引(id 自动增量字段)从 2001 年开始,现在我想将这些索引 2001 - 4000 更新为 1-2000