web-dev-qa-db-ja.com

外部キーを持つテーブルを作成するためのSQLite構文

外部キー参照を持つテーブルを作成しています。必要な構文について疑問に思っています。私は主に以下を見ました( 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で働いています。

41
hBrent

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

最初の構文はtable constraintであり、2番目の構文はcolumn constraint。これらの例では、動作は同じです。

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

23
CL.

この答えはあなたのものとは関係ないかもしれませんが、Android database。
IN SQLite外部キー制約はデフォルトで無効になっています(後方互換性のため)。を使用して明示的に有効にする必要があります

PRAGMA foreign_keys = 1

データベースとの接続を確立した後。詳細については、公式ドキュメントへのリンクを参照してください。 http://sqlite.org/foreignkeys.html 上記のリンクで外部キーのサポートを有効にするためにナビゲートしてください。

32
war_Hero