Les vérifications d'intégrité référentielle peuvent-elles être différées jusqu'à la validation dans MySQL ?
Dans MySQL, les vérifications d'intégrité référentielle sont effectuées immédiatement, et non différées jusqu'à la validation de la transaction. . Cette limitation, comme souligné dans la documentation MySQL, empêche certaines opérations, comme la suppression d'un enregistrement qui fait référence à lui-même à l'aide d'une clé étrangère.
La question du report des contrôles d'intégrité référentielle a déjà été soulevée, comme le montre le question PoEAA référencée. Le problème survient lors de l'insertion de données dans plusieurs tables liées au sein d'une seule transaction. Des erreurs de contraintes peuvent survenir lors de la tentative d'insertion dans des tables de jointure en raison de la vérification immédiate de l'intégrité référentielle.
Selon la norme SQL, la vérification des contraintes doit être différée. Cependant, InnoDB, le moteur de stockage par défaut de MySQL, l'applique actuellement ligne par ligne lors d'une instruction SQL. Cela signifie qu'il définit des verrous partagés au niveau des lignes sur les enregistrements référencés ou parents, empêchant ainsi la transaction de se poursuivre.
Par conséquent, dans MySQL avec InnoDB comme moteur de stockage, différer les vérifications d'intégrité référentielle jusqu'à la validation n'est actuellement pas possible. Cette limitation pose des défis pour certaines opérations de base de données et nécessite une attention particulière lors de la conception du schéma de base de données.
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!