我有两个使用自动增量的MonetDB表来为每一行生成唯一的ID。 子表中的每一行都引用 parent 表中的一行(建模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
父项,然后INSERT
所有孩子使用我刚刚创建的父项的ID
现在的问题是:如何获取INSERTed
行的ID?在MySQL中,有LAST_INSERT_ID()
。但是,我在MonetDB中找不到这样的东西。
我尝试了SELECT next value for "test"."seq_parent"
,它提供了一个ID,但同时增加了序列。我在执行SELECT MAX("id") FROM "test"."parent"
后立即尝试了INSERT
,但这很脆弱,因为如果连接了另一个客户端并且同时将数据插入父表,它就会中断。 / p>
答案 0 :(得分:1)
如果您可以使用应用程序代码,请执行此操作。首先运行查询以从seq_parent获取下一个值。然后将其设置为变量。然后在所有相关插入命令中使用该变量。