In SQLite3 werden Fremdschlüsseleinschränkungen standardmäßig nicht erzwungen. Dieses Verhalten unterscheidet sich von den meisten anderen relationalen Datenbankverwaltungssystemen (RDBMS) und führt zu Verwirrung bei Entwicklern, die an eine robuste Durchsetzung von Einschränkungen gewöhnt sind.
Betrachten Sie das folgende Beispiel: Wir erstellen zwei Tabellen, Personen und Orders, mit einer Fremdschlüsseleinschränkung in Orders, die auf den Primärschlüssel in Persons verweist. Obwohl diese Einschränkung definiert ist, können wir immer noch Zeilen in Bestellungen einfügen, ohne entsprechende Datensätze in Personen.
In SQLite3-Versionen 3.x und niedriger müssen Fremdschlüsseleinschränkungen explizit angegeben werden Wird bei jeder Verbindung mit der Datenbank mithilfe der folgenden Abfrage aktiviert:
PRAGMA foreign_keys = ON;
Dies liegt daran, dass SQLite3 die Abwärtskompatibilität mit seiner früheren Version beibehält. SQLite2.x, das keine Fremdschlüsseleinschränkungen unterstützte.
Die Entscheidung, die Fremdschlüsseldurchsetzung standardmäßig zu deaktivieren, wurde in erster Linie durch die Tradition von SQLite als eingebettete Datenbank zur Verwendung in verursacht Anwendungen, bei denen die Leistung entscheidend war. Fremdschlüsseleinschränkungen können sich auf die Leistung auswirken, insbesondere in Szenarien mit hoher Parallelität.
In SQLite4.x sind Fremdschlüsseleinschränkungen standardmäßig aktiviert. Diese Änderung befasst sich mit der potenziellen Verwirrung und Frustration, die durch das aktuelle Verhalten verursacht wird.
Im Kontext des bereitgestellten Beispiels sollte man PRAGMA Foreign_keys = ON; -Anweisung, um die Durchsetzung von Fremdschlüsseln zu ermöglichen. Danach führt das Einfügen von Datensätzen in Bestellungen ohne entsprechende Datensätze in Personen erwartungsgemäß zu einem Fehler.
Das obige ist der detaillierte Inhalt vonWarum erzwingt SQLite3 nicht standardmäßig Fremdschlüsseleinschränkungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!