In SQLite werden Fremdschlüsselbeschränkungen nicht erzwungen, es sei denn, die Fremdschlüsselunterstützung wurde aktiviert.
Das Aktivieren von Fremdschlüsseln beinhaltet Folgendes:
- Aktivieren Sie Fremdschlüssel beim Kompilieren von SQLite.
- Fremdschlüssel zur Laufzeit aktivieren.
Fremdschlüssel beim Kompilieren von SQLite aktivieren
Beim Kompilieren von SQLite geht es nicht so sehr um die Aktivierung Fremdschlüssel – es geht eher darum, nicht zu deaktivieren sie.
Das Aktivieren von Fremdschlüsseln beim Kompilieren von SQLite bedeutet einfach, dass Sie SQLITE_OMIT_FOREIGN_KEY
nicht verwenden und SQLITE_OMIT_TRIGGER
beim Kompilieren.
Wenn SQLITE_OMIT_TRIGGER
ist definiert, aber SQLITE_OMIT_FOREIGN_KEY
nicht ist, dann werden Fremdschlüsseldefinitionen geparst und können mit PRAGMA foreign_key_list
abgefragt werden , aber Fremdschlüsseleinschränkungen werden nicht erzwungen. Die PRAGMA foreign_keys
Der Befehl ist in dieser Konfiguration ein No-Op.
Wenn OMIT_FOREIGN_KEY
definiert ist, können Fremdschlüsseldefinitionen nicht einmal analysiert werden (der Versuch, eine Fremdschlüsseldefinition anzugeben, ist ein Syntaxfehler).
Fremdschlüssel zur Laufzeit aktivieren
Selbst wenn die Bibliothek mit aktivierten Fremdschlüsseleinschränkungen kompiliert wurde, müssen Sie die Fremdschlüsselunterstützung zur Laufzeit aktivieren.
Sie können dies mit dem folgenden Code tun:
PRAGMA foreign_keys = ON;
Wie bei den meisten PRAGMA
-Anweisungen könnten Sie alternativ ON
ersetzen mit TRUE
, YES
, oder 1
.
Sobald Sie das ausgeführt haben, werden Ihre Fremdschlüssel erzwungen.
Beachten Sie, dass diese Einstellung zum Erstellen nicht erforderlich ist Fremdschlüssel, aber es wird zum Erzwingen benötigt Fremdschlüssel.
Andere Verbindungen
Beachten Sie, dass dies nur Fremdschlüsseleinschränkungen für die aktuelle Datenbankverbindung aktiviert.
Wenn Sie eine neue Verbindung öffnen, müssen Sie diese Anweisung erneut ausführen, wenn Sie möchten, dass Fremdschlüssel in dieser Verbindung erzwungen werden.
Überprüfen Sie die Fremdschlüsselunterstützung für die aktuelle Verbindung
Sie können auch überprüfen, ob Fremdschlüssel für Ihre aktuelle Verbindung bereits aktiviert wurden, indem Sie den folgenden Code ausführen.
PRAGMA foreign_keys;
Ergebnis:
1
In meinem Fall habe ich für diese Verbindung bereits Fremdschlüssel aktiviert, sodass das Ergebnis 1 ist. Wenn Fremdschlüssel deaktiviert wären, wäre das Ergebnis 0.
Hier ist ein Beispiel für das Deaktivieren, Überprüfen des Werts, dann Aktivieren und erneute Überprüfen des Werts.
PRAGMA foreign_keys = FALSE;
PRAGMA foreign_keys;
PRAGMA foreign_keys = YES;
PRAGMA foreign_keys;
Ergebnis:
sqlite> PRAGMA foreign_keys = FALSE; sqlite> PRAGMA foreign_keys; foreign_keys ------------ 0 sqlite> PRAGMA foreign_keys = YES; sqlite> PRAGMA foreign_keys; foreign_keys ------------ 1