Maison >base de données >tutoriel mysql >Pourquoi les contraintes de clé étrangère SQLite3 semblent-elles échouer les INSERT jusqu'à ce que « PRAGMA Foreign_keys = ON ; » soit utilisé ?

Pourquoi les contraintes de clé étrangère SQLite3 semblent-elles échouer les INSERT jusqu'à ce que « PRAGMA Foreign_keys = ON ; » soit utilisé ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-04 18:49:40943parcourir

Why Do SQLite3 Foreign Key Constraints Seem to Fail INSERTs Until `PRAGMA foreign_keys = ON;` is Used?

Contraintes de clé étrangère SQLite3 : pourquoi les INSERT réussissent sans références

Bien que SQLite3 prenne en charge les contraintes de clé étrangère, un problème survient lors de la tentative d'insertion enregistre dans une table enfant sans respecter les contraintes. Ce comportement énigmatique peut laisser perplexe.

Pour percer ce mystère, examinons le script SQL fourni. Il établit deux tables : "Persons" et "Commandes", où "P_Id" dans "Commandes" est une clé étrangère faisant référence à la clé primaire dans "Persons".

Lors de l'insertion des données dans la table "Commandes", même avec une table "Personnes" vide, l'insertion semble se dérouler sans erreur. En effet, les contraintes de clé étrangère ne sont pas automatiquement activées dans SQLite3.x.

Pour rectifier cette anomalie et appliquer l'intégrité des clés étrangères, vous devez exécuter la requête "PRAGMA" suivante à chaque fois que vous établissez une connexion à votre base de données SQLite :

PRAGMA foreign_keys = ON;

En émettant cette directive, SQLite3 appliquera avec diligence toutes les contraintes de clé étrangère, empêchant les insertions qui violent celles-ci. contraintes.

Cette particularité découle de la compatibilité héritée de SQLite avec sa version antérieure, SQLite 2.x. Cependant, dans SQLite 4.x, les contraintes de clé étrangère seront activées par défaut, éclipsant ce comportement bizarre.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn