2016-03-22 16 views
0

Ich schaue mir die Beispiele aus https://sqlite.org/foreignkeys.html an und versuche sie zu reproduzieren. Das ist was ich bekomme.SQLite und Fremdschlüssel: Schlechte Beispiele aus der Dokumentation scheitern nicht

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)) 

Die Beispiele, die fehlschlagen sollten (unter 4 bis 7) nicht, zumindest bei der Erstellung von Tabellen. Die Dokumentation impliziert jedoch, dass es sollte. Was vermisse ich?

Antwort

0

The documentation you linked to sagt:

Wenn das Datenbankschema Fremdschlüssel Fehler enthält, die an mehr als eine Tabellendefinition erfordern Suche zu identifizieren, werden diese Fehler nicht erkannt, wenn die Tabellen erstellt werden. Stattdessen verhindern solche Fehler, dass die Anwendung SQL-Anweisungen vorbereitet, die den Inhalt der untergeordneten Tabellen auf eine Weise ändern, die die Fremdschlüssel verwendet.

+0

Was würden Sie sagen, sind "Fremdschlüsselfehler, bei denen mehr als eine Tabellendefinition gesucht werden muss"? Was wären Fremdschlüsselfehler, die nicht auf mehr als einen Tisch schauen müssen? – user1735003

+1

'create table t (x Referenzen x Fehler);' –

Verwandte Themen