160 votes

Ajouter une nouvelle colonne avec une contrainte de clé étrangère en une seule commande

J'essaie d'ajouter une nouvelle colonne qui sera une clé étrangère. J'ai pu ajouter la colonne et la contrainte de clé étrangère à l'aide de deux fichiers distincts. ALTER TABLE des commandes :

ALTER TABLE one
ADD two_id integer;

ALTER TABLE one
ADD FOREIGN KEY (two_id) REFERENCES two(id);

Existe-t-il un moyen de faire cela avec une commande ALTER TABLE au lieu de deux ? Je n'ai rien trouvé qui fonctionne.

3 votes

5voto

Learner Points 3627

Mise à jour 2020

C'est une question assez ancienne mais les gens y reviennent toujours, je vois. Si les réponses ci-dessus ne vous ont pas aidé, assurez-vous que vous utilisez le même type de données pour la nouvelle colonne que l'id de l'autre table.

Dans mon cas, j'utilise Laravel et j'utilise "unsigned integer" pour tous mes identifiants car il n'y a aucun intérêt à avoir des identifiants négatifs LOL.

Donc pour cela, la requête SQL brute changera comme ceci :

ALTER TABLE `table_name`
ADD `column_name` INTEGER UNSIGNED,
ADD CONSTRAINT constrain_name FOREIGN KEY(column_name) REFERENCES foreign_table_name(id);

J'espère que cela aidera

3 votes

"ADD CONSTRAINT" devrait juste être "CONSTRAINT", oui ?

3voto

DLL PostgreSQL pour ajouter une colonne FK :

ALTER TABLE one
ADD two_id INTEGER REFERENCES two;

2voto

Dan B. Points 181

Pour DB2, la syntaxe est la suivante :

ALTER TABLE one ADD two_id INTEGER FOREIGN KEY (two_id) REFERENCES two (id);

1voto

Arsman Ahmad Points 982

ALTER TABLE TableName ADD NewColumnName INTEGER, FOREIGN KEY(NewColumnName) REFERENCES [ForeignKey_TableName](Foreign_Key_Column)

0voto

user2010014 Points 15

Vous pouvez le faire comme ci-dessous dans SQL Server

ALTER TABLE one
ADD two_id int foreign key
REFERENCES two(id)

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