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é ?
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!