如何在MonetDB中正确实现AUTO_INCREMENT?

时间:2017-01-10 17:06:20

标签: sql monetdb

我有两个使用自动增量的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>

1 个答案:

答案 0 :(得分:1)

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