如何在 MonetDB 中正确实现 AUTO_INCREMENT?

How to implement AUTO_INCREMENT properly in MonetDB?

我有两个 MonetDB table 使用 auto-increment 为每一行生成唯一的 ID。 child table 中的每一行引用 parent table 中的一行(建模 1:n 关系):

CREATE SEQUENCE "test"."seq_parent" as integer START WITH 1;

CREATE TABLE "test"."parent" (
    "id" INT NOT NULL DEFAULT next value for "test"."seq_parent",
    "name" STRING,
    PRIMARY KEY ("id")
);

CREATE SEQUENCE "test"."seq_child" as integer START WITH 1;

CREATE TABLE "test"."child" (
    "id" INT NOT NULL DEFAULT next value for "test"."seq_child",
    "parent_id" INT NOT NULL,
    "name" STRING,
    PRIMARY KEY ("id")
);

当我导入 (parent, child_1, …, child_n) 元组到这个数据库时,我首先需要 INSERT parent 和然后 INSERT 所有 children 使用我刚刚创建的 parent 的 ID。

现在的问题是:如何获取我刚刚INSERTed的行的ID?在 MySQL 中,有 LAST_INSERT_ID()。但是,我在 MonetDB 中找不到类似的东西。

我尝试了 SELECT next value for "test"."seq_parent",它给出了一个 ID,但同时增加了序列。我也在执行 INSERT 后立即尝试 SELECT MAX("id") FROM "test"."parent",但这很脆弱,因为如果连接了另一个客户端并将数据插入 parent,它就会中断table同时

如果您可以使用应用程序代码,请使用它。首先 运行 从 seq_parent 获取下一个值的查询。然后将其设置为一个变量。然后在所有相关的插入命令中使用该变量。