2012-03-30 18 views
23

SQLite3に問題があります。SQLite3は外部キー制約をサポートしていませんか?

私は、次のSQLスクリプトを使用して2つのテーブルpersonsordersを作成しました:

sqlite> create table Persons(
      P_Id int primary key, 
      LastName varchar, 
      FirstName varchar, 
      Address varchar, 
      City varchar 
     ); 

sqlite> create table Orders(
      O_Id int NOT NULL, 
      OrderNo int NOT NULL, 
      P_Id int, 
      PRIMARY KEY (O_Id), 
      FOREIGN KEY (P_Id) REFERENCES Persons(P_Id) 
     ); 

sqlite> insert into Orders values(1,77895,3); 

sqlite> select * from Orders; 

1|77895|3 

sqlite> 

者テーブルが空の行がordersテーブルに挿入することが可能であるにもかかわらず。

エラーを表示していません。

どうすれば可能ですか?

答えて

51

を、あなたはSQLiteデータベースに接続し、次のクエリを作るたびにを持っている:

PRAGMA foreign_keys = ON; 

それ以外の場合、SQLiteはすべての外部キー制約を無視します。

毎回なぜですか? documentationによると、SQLite 2.xとの下位互換性。

SQLite 4.xでは、FK制約はenabled by defaultになります。

+0

毎回ですか?永続的に有効にすることはできませんか? – mafu

+0

@mafuはい、毎回です。私は理由を説明する答えを編集しました。 – kijin

+7

今日はちょうどこれに走った。これは愚かなエフェイングなことです。 –

0

ドキュメントをお読みになりましたか? main pageには、バージョン3.6.19で導入されているという。 linkは、外部キーの使用方法を示しています(コードは正しい)。

コードで省略したエラーメッセージが表示されますか?ドキュメントに記載されているすべての前提条件を確認しましたか?

+0

その後、古いバージョンを削除し、新しいバージョンのsqlite3をインストールする方法を教えてください。 –

+0

@AbbasMulaniアンインストール方法とインストール方法は、あなたのOSなどによって異なります。現在インストールされているバージョンとインストールされているバージョンを確認してください。新しいバージョンをインストールする手順はそれほど大きくはありません。 – mrab

0

あなたのSQLiteで有効に外部キー制約がある場合チェックアウト:SQLiteの3.xではhttp://sqlite.org/foreignkeys.html#fk_enable

+0

コマンドを入力すると何も表示されません。 PRAGMA foreign_key; –