2017-01-10 14 views
0

私は、自動増分を使用して各行に一意のIDを生成する2つのMonetDBテーブルを持っています。テーブルが(:Nの関係1をモデル化する):テーブル内の1つの行を指す子の各行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") 
); 

Iは(親、child_1、...、child_n)がこのデータベースにタプルインポート私は最初にINSERTの親を必要とし、次にINSERTのすべての子どもが作成したばかりの親のIDを使用します。

問題は次のとおりです。私はちょうどINSERTedの行のIDを取得しますか? 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

関連する問題