Maison >base de données >tutoriel mysql >Comment puis-je ajouter une contrainte de clé étrangère à une table SQLite existante ?

Comment puis-je ajouter une contrainte de clé étrangère à une table SQLite existante ?

DDD
DDDoriginal
2025-01-04 03:55:38240parcourir

How Can I Add a Foreign Key Constraint to an Existing SQLite Table?

SQLite : ajout d'une clé étrangère à une table existante

Lors de l'interrogation d'une base de données, le maintien de l'intégrité des données est primordial. Les clés étrangères jouent un rôle crucial dans le renforcement des relations entre les tables, garantissant ainsi la validité des références de données. Dans le contexte de SQLite, cependant, certaines limitations existent lorsqu'il s'agit de modifier des tables existantes.

Défi : Ajouter une clé étrangère à une table existante

Considérez le scénario suivant : Vous disposez d'une table SQLite existante nommée "child" avec le schéma suivant :

CREATE TABLE child( 
  id INTEGER PRIMARY KEY, 
  parent_id INTEGER, 
  description TEXT);

Votre objectif est d'établir une clé étrangère contrainte sur la colonne "parent_id", en supposant que les clés étrangères sont déjà activées. Cependant, les méthodes conventionnelles peuvent ne pas suffire.

Solution : Limitations et solutions de contournement

Dans SQLite, l'ajout d'une clé étrangère à une table existante n'est pas directement possible à l'aide de l'option "ALTER TABLE ADD CONSTRAINT". Contrairement à d'autres systèmes de bases de données, SQLite ne prend pas en charge cette variante spécifique d'ALTER TABLE.

La seule solution réalisable est de modifier la table lors de sa création. Vous pouvez supprimer la table "enfant" existante, la recréer avec la contrainte de clé étrangère, puis la repeupler avec les données enregistrées à partir d'une table temporaire :

CREATE TABLE child ( 
    id           INTEGER PRIMARY KEY, 
    parent_id    INTEGER, 
    description  TEXT,
    FOREIGN KEY (parent_id) REFERENCES parent(id)
);

Cette procédure garantit que la contrainte de clé étrangère est réussie établi pour la table "enfant".

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!

Déclaration:
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