1

2つのsqliteテーブルがあり、一方のテーブルにはもう一方の外部キーがあります。

CREATE TABLE a (id INTEGER PRIMARY KEY NOT NULL, value TEXT UNIQUE NOT NULL);
CREATE TABLE b (id INTEGER PRIMARY KEY NOT NULL, a INTEGER REFERENCES a (id) NOT NULL, value TEXT NOT NULL);

私はintoINSERTでやっています。SELECTb

INSERT INTO b (a, value) SELECT ?value, a.id FROM a WHERE a.value == ?a;

行がbに挿入されたかどうかを知るにはどうすればよいですか?挿入されたばかりの値に対してaを実行SELECTし、それらが存在する天気をチェックすることは、かなり非効率的なようです。

4

1 に答える 1

2

changes()関数がお役に立てば幸いです。

Changes()関数は、下位レベルのトリガーのステートメントを除いて、最後に完了したINSERT、DELETE、またはUPDATEステートメントによって変更または挿入または削除されたデータベース行の数を返します。Changes( )SQL関数は、 sqlite3_changes() C / C ++関数のラッパーであるため、変更をカウントするための同じルールに従います。

したがって、changes()は、行が挿入された場合は1を返し、それ以外の場合は0を返します。

于 2011-12-03T16:43:39.947 に答える