私は、自動増分を使用して各行に一意の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"
を試しましたが、別のクライアントが接続されている場合は破損して、親のテーブルにデータを同時に挿入すると壊れてしまいます。
私の場合、問題は実際にアプリケーションコードとMonetDBシーケンスの組み合わせによって解決できます。時には明らかな解決策が見られないこともあります。これを指摘してくれてありがとう! – dasup