2017-01-10 111 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