2016-03-22 34 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

'創建表t(x引用x錯誤);' –