Maison > base de données > tutoriel mysql > Pourquoi SQLite3 n'applique-t-il pas les contraintes de clé étrangère par défaut ?

Pourquoi SQLite3 n'applique-t-il pas les contraintes de clé étrangère par défaut ?

Mary-Kate Olsen
Libérer: 2025-01-05 10:10:40
original
134 Les gens l'ont consulté

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

Explication de l'application des contraintes de clé étrangère SQLite3

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.

Description du problème

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.

Cause première et solution

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;
Copier après la connexion

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.

Raisons de la désactivation de l'application

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.

Considérations pour les versions futures

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.

Implications pratiques

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal