Heim > Datenbank > MySQL-Tutorial > Warum erzwingt SQLite3 nicht standardmäßig Fremdschlüsseleinschränkungen?

Warum erzwingt SQLite3 nicht standardmäßig Fremdschlüsseleinschränkungen?

Mary-Kate Olsen
Freigeben: 2025-01-05 10:10:40
Original
134 Leute haben es durchsucht

Why Doesn't SQLite3 Enforce Foreign Key Constraints by Default?

Erklärung der Durchsetzung von Fremdschlüsseleinschränkungen in SQLite3

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.

Problembeschreibung

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.

Ursache und Lösung

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;
Nach dem Login kopieren

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.

Gründe für die deaktivierte Durchsetzung

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.

Überlegungen für zukünftige Versionen

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.

Praktische Implikationen

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage