2016-12-17 2 views
0

ich ein litte Problem mit meiner SQLite-Datenbank, vor allem mit den folgenden Tabellen:SQLite wird nicht Fehler aus, wenn nicht vorhandenen Fremdschlüsselwertes Einfügen

CREATE TABLE foo (
    key INTEGER PRIMARY KEY, 
    name TEXT NOT NULL 
); 

CREATE TABLE bar (
    _id INTEGER PRIMARY KEY, 
    key INTEGER NOT NULL, 
    what TEXT NOT NULL, 
    else TEXT, 
    FOREIGN KEY (key) REFERENCES foo (key) DEFERRABLE INITIALLY DEFERRED 
); 

Wenn ich der SQLite-Dokumentation die richtige Art und Weise zu verstehen, Der Versuch, eine Zeile in bar einzufügen, die keiner Zeile in der Tabelle foo entspricht, sollte fehlschlagen und einen Fehler oder etwas verursachen.

Leider folgenden Befehl funktioniert, auch wenn keine Taste 42 existis in foo:

INSERT INTO bar (key, what, else) VALUES (42, "something", "else"); 

Dies wird eine Reihe in bar mit den angegebenen Werten (key = 42) erstellen, während es keine Zeile in foo existiert mit dem Schlüssel 42.

Ist es mir oder was ist hier falsch?

+0

Haben Sie das Pragma 'PRAGMA foreign_keys = ON' gesetzt? – rapvelopment

Antwort

-1

Wie @kijin auf Does SQLite3 not support foreign key constraints? veröffentlicht

In SQLite 3.x, müssen Sie jedes Mal, wenn Sie zu einer SQLite-Datenbank verbinden Sie die folgende Abfrage machen: wird SQLite

PRAGMA foreign_keys = ON; 

Ansonsten ignorieren alle Fremdschlüsseleinschränkungen.

Warum jedes Mal? Abwärtskompatibilität mit SQLite 2.x gemäß der Dokumentation.

In SQLite 4.x sind FK-Einschränkungen standardmäßig aktiviert.

Verwandte Themen