2017-01-10 76 views
0

我有两个MonetDB表使用自动增量来为每一行生成唯一的ID。在孩子表的每一行指的是一个排的表(造型1:N的关系):如何在MonetDB中正确实现AUTO_INCREMENT?

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") 
); 

当我输入(父母,child_1,...,child_n)元组到该数据库,我首先需要INSERT父母,然后INSERT所有使用我刚刚创建的父母的ID的孩子。

现在的问题是:如何获得我刚才的行的ID INSERTed?在MySQL中,这有LAST_INSERT_ID()。但是,我在MonetDB中找不到像这样的东西。

我试过SELECT next value for "test"."seq_parent",它给出了一个ID,但同时增加了序列。在执行INSERT之后,我也尝试了SELECT MAX("id") FROM "test"."parent",但是如果连接了另一个客户端,并且同时将数据插入到父表表中,则它会中断。

回答

1

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

+0

在我的情况下,问题确实可以通过应用程序代码和MonetDB序列的组合来解决。有时候没有看到明显的解决方案。感谢您指出这一点! – dasup