Dans SQLite3, les contraintes de clé étrangère ne sont pas appliquées par défaut. Ce comportement diffère de la plupart des autres systèmes de gestion de bases de données relationnelles (SGBDR), ce qui entraîne une confusion parmi les développeurs habitués à une application robuste des contraintes.
Considérons l'exemple suivant : nous créons deux tables, Personnes et Orders, avec une contrainte de clé étrangère dans Orders qui fait référence à la clé primaire dans Persons. Bien que cette contrainte soit définie, nous pouvons toujours insérer des lignes dans les commandes sans enregistrements correspondants dans les personnes.
Dans SQLite3 versions 3.x et inférieures, les contraintes de clé étrangère doivent être explicitement activé à l'aide de la requête suivante à chaque fois que vous vous connectez à la base de données :
PRAGMA foreign_keys = ON;
Cela est dû au fait que SQLite3 maintient une compatibilité ascendante avec sa version antérieure, SQLite2.x, qui ne prenait pas en charge les contraintes de clé étrangère.
La décision de désactiver l'application des clés étrangères par défaut était principalement motivée par l'héritage de SQLite en tant que base de données intégrée à utiliser dans applications où les performances étaient essentielles. Les contraintes de clé étrangère peuvent avoir un impact sur les performances, en particulier dans les scénarios à forte concurrence.
Dans SQLite4.x, les contraintes de clé étrangère seront activées par défaut. Ce changement répond à la confusion et à la frustration potentielles causées par le comportement actuel.
Dans le contexte de l'exemple fourni, il faut exécuter le PRAGMA Foreign_keys = ON ; déclaration pour permettre l’application des clés étrangères. Après cela, l'insertion d'enregistrements dans les commandes sans les enregistrements correspondants dans les personnes entraînera une erreur, comme prévu.
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!