2016-12-11 2 views
0

弱いエンティティに適切なキー値を挿入するのに苦労します。SQLite:弱いエンティティテーブルに挿入する(または、ちょうど挿入された定義エンティティのIDを取得する方法)

これら2つのエンティティは:

CREATE TABLE 'key' (
'id' INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 
... 

CREATE TABLE 'key_data_rsa' (
'id_key' INTEGER NOT NULL PRIMARY KEY REFERENCES 'key' ('id'), 
... 

Iは、好ましくは、1つのクエリで、テーブル「キー」とテーブル「key_data_rsa」への鍵データを対応するキーのメタデータを挿入する必要があります。

私はこの問題を理解しているので、 'key_data_rsa'エントリが挿入される前に、 'key'の 'id'が最初に存在する必要があるため、エントリ 'key'を挿入する必要があります。

私が2つのステップでこれを行うと、「キー」エントリのトラックが失われます。「キー」の唯一保証されたユニークキーは「ID」であり、挿入されるとすぐに、 'id'を取得するためにもう一度それを選択することができます。

強力なエンティティへの適切な接続を維持するために、このシナリオで弱いエンティティにデータを挿入するにはどうすればよいですか?

が真剣にに間違っていない限り、このスキームとユースケースにコメントや質問をしないでください。ありがとう。

-m。

+0

データベースにアクセスするために使用している言語は何ですか? –

+0

Perl DBI。それはどういう意味ですか? – mikky

+1

http://stackoverflow.com/questions/6242756/how-to-retrieve-inserted-id-after-inserting-row-in-sqlite-using-pythonを確認してください。Perlで同じロジックを適用できるかどうかを確認してください。 –

答えて

1

機能last_insert_rowid()が役立ちます。これは、最近成功した挿入のROWIDをROWIDを持つ表に戻します。あなたのケースでは、カラムidINTEGER PRIMARY KEYであり、従って、単に次のように動作するはず弱いエンティティから、挿入された強力なエンティティを参照すると、行ID(参照sqlite core functions

の別名として扱われます。

insert into key values (null, ...); 
insert into key_data_rsa values (last_insert_rowid(), ...); 
+0

はい、まさに私が探していたものです。 Dudu Markovitzがその質問の下のコメントでヒントをたどっています。 – mikky

関連する問題