我有一张表,其中标识列的定义如下:
id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
首先,我手动插入了几行,包括以id
下列:
INSERT INTO things(id, …)
VALUES (…, …), (…, …), (…, …);
我现在想对其余部分使用自动生成的 ID。
我尝试过:
ALTER TABLE things ALTER COLUMN id RESTART WITH (SELECT max(id) FROM things);
但那不起作用。
我甚至尝试过:
EXECUTE IMMEDIATE 'ALTER TABLE employees ALTER COLUMN id RESTART WITH ' || (SELECT MAX(id)+1 FROM employees);
我知道我可以用一个常数值重新启动,但如果我无法预测插入后的最终 ID,那就没用了。
有没有办法动态重新启动标识列?
您可以定义一个变量来提取变量中的最大值(id)并在其中使用该变量
EXECUTE IMMEDIATE
并将其包装在一个小的匿名块中。运行此块之前的数据
运行块并运行插入后
输出
小提琴演示
这将帮助您:
您需要先从表中检索 max(id) 值,然后在 ALTER TABLE 语句中动态使用该值来重新启动标识列。由于 ALTER TABLE ... RESTART WITH 需要常量并且不支持直接子查询,因此您可以执行以下操作:
如果使用MySQL:
MySQL 使用AUTO_INCREMENT**,** 因此需要 ALTER TABLE ... AUTO_INCREMENT。