0

これらのクエリを実行すると:

create table University ( branch text primary key, region text, enrollment int);
create table Student ( sID int primary key, sName text, average int);
create table Apply ( sID int references Student(sID), branch text references University(branch), major text, decision text);

insert into Apply values ( 123, 'stanford', 'CS', 'Y');

参照テーブルに対応する値を持たないタプルを挿入しているため、エラーが返されるはずです。しかし、これらのコマンドを実行すると、このタプルは成功します。このクエリの何が問題になっていますか? 私の DBMS は sqlite で、sqliteman を使用しています。

4

1 に答える 1

1

外部キーのサポートを有効にする方法を学ぶ必要があります

ドキュメントの引用:

SQLite で外部キー制約を使用するには、SQLITE_OMIT_FOREIGN_KEY または SQLITE_OMIT_TRIGGER を定義せずにライブラリをコンパイルする必要があります。SQLITE_OMIT_TRIGGER が定義されているが、SQLITE_OMIT_FOREIGN_KEY が定義されていない場合、SQLite はバージョン 3.6.19 より前と同じように動作します。外部キー定義は解析され、PRAGMAforeign_key_list を使用してクエリできますが、外部キー制約は強制されません。PRAGMAforeign_keys コマンドは、この構成ではノーオペレーションです。OMIT_FOREIGN_KEY が定義されている場合、外部キー定義を解析することさえできません (外部キー定義を指定しようとすると構文エラーになります)。

sqliteman 制約トリガーもお読みください:

サポートされていない SQL 機能がもう 1 つあります。Sqlite は、外部キーと非 null 制約を強制しません。

于 2013-05-13T09:16:18.553 に答える