Dans SQLite, les contraintes de clé étrangère ne sont pas appliquées à moins que la prise en charge de la clé étrangère ait été activée.
L'activation des clés étrangères implique ce qui suit :
- Activer les clés étrangères lors de la compilation de SQLite.
- Activer les clés étrangères lors de l'exécution.
Activer les clés étrangères lors de la compilation de SQLite
Lorsqu'il s'agit de compiler SQLite, il ne s'agit pas tant d'activer clés étrangères - il s'agit plutôt de ne pas désactiver eux.
L'activation des clés étrangères lors de la compilation de SQLite signifie simplement que vous n'utilisez pas SQLITE_OMIT_FOREIGN_KEY
et SQLITE_OMIT_TRIGGER
lors de la compilation.
Si SQLITE_OMIT_TRIGGER
est défini mais SQLITE_OMIT_FOREIGN_KEY
n'est pas, alors les définitions de clés étrangères sont analysées et peuvent être interrogées à l'aide de PRAGMA foreign_key_list
, mais les contraintes de clé étrangère ne sont pas appliquées. Les PRAGMA foreign_keys
la commande est un no-op dans cette configuration.
Si OMIT_FOREIGN_KEY
est défini, les définitions de clé étrangère ne peuvent même pas être analysées (tenter de spécifier une définition de clé étrangère est une erreur de syntaxe).
Activer les clés étrangères lors de l'exécution
Même lorsque la bibliothèque a été compilée avec les contraintes de clé étrangère activées, vous devez toujours activer la prise en charge de la clé étrangère lors de l'exécution.
Vous pouvez le faire avec le code suivant :
PRAGMA foreign_keys = ON;
Comme avec la plupart des PRAGMA
instructions, vous pouvez également remplacer ON
avec TRUE
, YES
, ou 1
.
Une fois que vous avez exécuté cela, vos clés étrangères seront appliquées.
Notez que ce paramètre n'est pas requis pour la création clés étrangères, mais il est nécessaire pour appliquer clés étrangères.
Autres connexions
Notez que cela n'active que les contraintes de clé étrangère pour la connexion actuelle à la base de données.
Si vous ouvrez une nouvelle connexion, vous devrez réexécuter cette instruction si vous souhaitez que les clés étrangères soient appliquées dans cette connexion.
Vérifier la prise en charge des clés étrangères pour la connexion actuelle
Vous pouvez également vérifier si les clés étrangères ont déjà été activées ou non pour votre connexion actuelle en exécutant le code suivant.
PRAGMA foreign_keys;
Résultat :
1
Dans mon cas, j'ai déjà activé les clés étrangères pour cette connexion, donc le résultat est 1. Si les clés étrangères étaient désactivées, le résultat serait 0.
Voici un exemple de désactivation, de vérification de la valeur, puis d'activation et de revérification de la valeur.
PRAGMA foreign_keys = FALSE;
PRAGMA foreign_keys;
PRAGMA foreign_keys = YES;
PRAGMA foreign_keys;
Résultat :
sqlite> PRAGMA foreign_keys = FALSE; sqlite> PRAGMA foreign_keys; foreign_keys ------------ 0 sqlite> PRAGMA foreign_keys = YES; sqlite> PRAGMA foreign_keys; foreign_keys ------------ 1