201 votes

Comment ajouter une clé étrangère à une table sqlite (3.6.21) existante ?

J'ai le tableau suivant :

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

Comment ajouter une contrainte de clé étrangère sur parent_id ? Supposons que les clés étrangères sont activées.

La plupart des exemples supposent que vous créez la table. J'aimerais ajouter la contrainte à une table existante.

1 votes

La commande ALTER de SQLite ne prend en charge que "renommer la table" et "ajouter une colonne". Cependant, nous pouvons apporter d'autres modifications arbitraires au format d'une table en utilisant une simple séquence d'opérations. Vérifiez ma réponse

-2voto

En fait, vous ne pouvez pas, mais vous pouvez contourner la situation.

La manière correcte d'ajouter la contrainte de clé étrangère à une table existante est la commande suivante.

db.execSQL("alter table child add column newCol integer REFERENCES parent(parent_Id)");

Ensuite, copiez le parent_Id données au nouvelleCol puis supprimez le Identifiant_parent colonne. Il n'est donc pas nécessaire d'utiliser une table temporaire.

0 votes

Il semble que vous n'ayez pas lu la question attentivement. Le problème était d'ajouter une contrainte étrangère uniquement, et non d'ajouter une colonne avec une contrainte.

0 votes

Non. Cela ne répond pas à la question posée.

-3voto

Ajoutez d'abord une colonne dans la table enfant Cid como int puis alter table avec le code ci-dessous. De cette façon, vous pouvez ajouter la clé étrangère Cid comme clé primaire de la table parent et l'utiliser comme clé étrangère dans la table enfant ... j'espère que cela vous aidera comme c'est bon pour moi :

ALTER TABLE [child] 
  ADD CONSTRAINT [CId] 
  FOREIGN KEY ([CId]) 
  REFERENCES [Parent]([CId]) 
  ON DELETE CASCADE ON UPDATE NO ACTION;
GO

2 votes

Ceci n'est pas valable en SQLite. Il s'agit également de la syntaxe MS SQL.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X