Um Fremdschlüssel-Constraints in SQLite zu verwenden, muss die Bibliothek mit keinem der beiden SQLITE_OMIT_FOREIGN_KEY oder SQLITE_OMIT_TRIGGER definiert kompiliert werden. Wenn SQLITE_OMIT_TRIGGER definiert ist, SQLITE_OMIT_FOREIGN_KEY jedoch nicht, verhält sich SQLite wie vor Version 3.6.19 - Fremdschlüsseldefinitionen werden analysiert und können mit PRAGMA foreign_key_list abgefragt werden, aber Fremdschlüsseleinschränkungen werden nicht erzwungen. Der Befehl PRAGMA foreign_keys 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).
Unter der Annahme, dass die Bibliothek mit aktivierten Fremdschlüsseleinschränkungen kompiliert wurde, muss sie von der Anwendung zur Laufzeit mithilfe des Befehls PRAGMA foreign_keys weiterhin aktiviert werden. Zum Beispiel:
sqlite> PRAGMA foreign_keys = ON;
Fremdschlüssel-Constraints werden standardmäßig (für Rückwärtskompatibilität) deaktiviert, so muss für jede Datenbankverbindung separat aktiviert werden. (Beachten Sie jedoch, dass sich zukünftige Versionen von SQLite ändern können, sodass Fremdschlüsseleinschränkungen standardmäßig aktiviert sind. Vorsichtige Entwickler machen keine Annahmen darüber, ob Fremdschlüssel standardmäßig aktiviert sind oder nicht, und aktivieren oder deaktivieren sie bei Bedarf.) Anwendung kann auch eine PRAGMA foreign_keys-Anweisung verwenden, um festzustellen, ob Fremdschlüssel derzeit aktiviert sind.
So bereiten Sie die PRAGMA-Anweisung - und führen Sie es sicherzustellen, dass sie wirksam wird.
Möglicherweise gibt es eine spezialisiertere API; Sie können das Handbuch auch lesen.
Danke, aber versucht: sqlite3_prepare (db, "PRAGMA fremder_keys = ON;", -1, & stmt, 0); sqlite3_step (stmt); Der Schritt ergibt SQLITE_DONE, aber es funktioniert noch nicht der Fremdschlüssel. – Fabiano
Haben Sie überprüft, wie Ihre SQLite-Bibliothek erstellt wurde? Beachten Sie die Anforderungen im ersten Zitat - Sie müssen SQLite erstellen, damit Fremdschlüssel aktiviert werden können. –
ES FUNKTIONIERT !! Ich weiß nicht warum, aber ich habe den PC gewechselt, um einen Kompilier-Test zu machen und es funktioniert !! Vielen Dank, Mann! Ich schätze. – Fabiano