SQLite
 sql >> Datenbank >  >> RDS >> SQLite

So aktivieren Sie die Fremdschlüsselunterstützung in SQLite

In SQLite werden Fremdschlüsselbeschränkungen nicht erzwungen, es sei denn, die Fremdschlüsselunterstützung wurde aktiviert.

Das Aktivieren von Fremdschlüsseln beinhaltet Folgendes:

  1. Aktivieren Sie Fremdschlüssel beim Kompilieren von SQLite.
  2. 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