2016-03-22 10 views
0

私はhttps://sqlite.org/foreignkeys.htmlの例を見て、それらを再現しようとしています。これは私が得るものです。SQLiteと外部キー:ドキュメントの悪い例が失敗しない

SQLite version 3.11.1 2016-03-03 16:17:53 
Enter ".help" for usage hints. 
Connected to a transient in-memory database. 
Use ".open FILENAME" to reopen on a persistent database. 
sqlite> PRAGMA foreign_keys=ON; 
sqlite> PRAGMA foreign_keys; -- check that it registered 
1 
sqlite> CREATE TABLE parent(a PRIMARY KEY, b UNIQUE, c, d, e, f); 
sqlite> CREATE UNIQUE INDEX i1 ON parent(c, d); 
sqlite> CREATE INDEX i2 ON parent(e); 
sqlite> CREATE UNIQUE INDEX i3 ON parent(f COLLATE nocase); 
sqlite> CREATE TABLE child1(f, g REFERENCES parent(a)); 
sqlite> CREATE TABLE child2(h, i REFERENCES parent(b)); 
sqlite> CREATE TABLE child3(j, k, FOREIGN KEY(j, k) REFERENCES parent(c, d)); 
sqlite> CREATE TABLE child4(l, m REFERENCES parent(e)); -- Error? 
sqlite> CREATE TABLE child5(n, o REFERENCES parent(f)); -- Error? 
sqlite> CREATE TABLE child6(p, q, FOREIGN KEY(p, q) REFERENCES parent(b, c)); -- Error? 
sqlite> CREATE TABLE child7(r REFERENCES parent(c)); -- Error? 
sqlite> select * from sqlite_master where type='table'; 
table|parent|parent|2|CREATE TABLE parent(a PRIMARY KEY, b UNIQUE, c, d, e, f) 
table|child1|child1|8|CREATE TABLE child1(f, g REFERENCES parent(a)) 
table|child2|child2|9|CREATE TABLE child2(h, i REFERENCES parent(b)) 
table|child3|child3|10|CREATE TABLE child3(j, k, FOREIGN KEY(j, k) REFERENCES parent(c, d)) 
table|child4|child4|11|CREATE TABLE child4(l, m REFERENCES parent(e)) 
table|child5|child5|12|CREATE TABLE child5(n, o REFERENCES parent(f)) 
table|child6|child6|13|CREATE TABLE child6(p, q, FOREIGN KEY(p, q) REFERENCES parent(b, c)) 
table|child7|child7|14|CREATE TABLE child7(r REFERENCES parent(c)) 

少なくとも、テーブル作成時に失敗する例(子4から7)はありません。しかし、ドキュメンテーションはそれがすべきことを暗示している。私は何が欠けていますか?

答えて

0

documentation you linked toは言う:

データベーススキーマは、テーブルが作成されるときに、それらのエラーが検出されていない、識別するために、複数のテーブル定義を見ている必要が外部キーエラーが含まれている場合。代わりに、そのようなエラーにより、アプリケーションは、外部キーを使用する方法で子表または親表の内容を変更するSQL文を準備できなくなります。

+0

"識別するために複数のテーブル定義を調べる必要がある外部キーエラー"とは何でしょうか?複数のテーブルを参照する必要のない外部キーエラーは何でしょうか? – user1735003

+1

'create table t(x参照xエラー);' –

関連する問題