51

外部キー参照を含むテーブルを作成しています。必要な構文について疑問に思っています。ほとんどの場合、次のものを見てきました( http://www.sqlite.org/foreignkeys.html#fk_basicsから):

CREATE TABLE artist(  
  artistid    INTEGER PRIMARY KEY,  
  artistname  TEXT  
);  
CREATE TABLE track(  
  trackid     INTEGER,   
  trackname   TEXT,  
  trackartist INTEGER,  
  FOREIGN KEY(trackartist) REFERENCES artist(artistid)  
);

ただし、同じサイト ( http://www.sqlite.org/foreignkeys.html#fk_actions ) から、次のように表示されます。

CREATE TABLE artist(  
  artistid    INTEGER PRIMARY KEY,  
  artistname  TEXT  
);  
CREATE TABLE track(  
  trackid     INTEGER,  
  trackname   TEXT,   
  trackartist INTEGER REFERENCES artist(artistid) ON UPDATE CASCADE  
);

後者の構文はもう少し簡潔ですが、結果が何らかの形で異なるかどうかを知りたいです (ON UPDATE CASCADEはもちろん効果があります。参照されているサイトからコードを正確にコピーしたため、それを含めただけであり、上記の構文がそのような指定を行う場合にのみ適用されるわけではないことを知りません)。問題が発生した場合に備えて、私はAndroidで作業しています。

4

2 に答える 2

42

この回答はあなたのものとは関係ないかもしれませんが、Android データベースを使用している他の人にとっては役立つはずだと思いました。
IN SQLite 外部キー制約はデフォルトで無効になっています(下位互換性のため)。を使用して明示的に有効にする必要があります

PRAGMA foreign_keys = 1

データベースとの接続を確立した後。これは、より詳細に説明されている公式ドキュメントへのリンクです。 http://sqlite.org/foreignkeys.html 上記のリンクで外部キー サポートを有効にする方法に移動してください。

于 2015-01-07T09:35:34.840 に答える
28

構文図を参照してください。

最初の構文はテーブル制約で、2 番目の構文は列制約です。これらの例では、同じように動作します。

複数の列にわたるキーのテーブル制約が必要になります (キーをアタッチできる単一の列がない場合)。

于 2013-08-22T19:34:17.090 に答える