J'essaye 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 ALTER TABLE
commandes distinctes :
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 ne pouvais rien trouver qui fonctionne.
Réponses:
Comme souvent avec les questions liées à SQL, cela dépend du SGBD. Certains SGBD vous permettent de combiner des opérations de table ALTER séparées par des virgules. Par exemple...
Syntaxe Informix :
La syntaxe d' IBM DB2 LUW est similaire, répétant le mot-clé ADD mais (si je lis le diagramme correctement) ne nécessitant pas de virgule pour séparer les éléments ajoutés.
Syntaxe de Microsoft SQL Server :
Certains autres ne vous permettent pas de combiner des opérations ALTER TABLE comme ça. Le SQL standard n'autorise qu'une seule opération dans l'instruction ALTER TABLE, donc en SQL standard, elle doit être effectuée en deux étapes.
la source
Dans MS-SQLServer:
la source
Pour SQL Server, cela devrait être quelque chose comme
la source
Dans MS SQL SERVER:
Avec le nom de clé étrangère défini par l'utilisateur
Sans nom de clé étrangère défini par l'utilisateur
la source
Dans Oracle :
la source
Mise à jour 2020
C'est une question assez ancienne mais les gens y reviennent encore, 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'utilisais Laravel et j'utilise "entier non signé" pour tous mes identifiants car il ne sert à rien d'avoir un id négatif LOL.
Donc, pour cela, la requête SQL brute changera comme ceci:
J'espère que ça aide
la source
Vous pouvez le faire comme ci-dessous dans SQL Server
la source
DLL PostgreSQL pour ajouter une colonne FK:
la source
ALTER TABLE TableName ADD NewColumnName INTEGER, FOREIGN KEY(NewColumnName) REFERENCES [ForeignKey_TableName](Foreign_Key_Column)
la source
Pour DB2, la syntaxe est:
la source
Si vous devez également ajouter des valeurs par défaut au cas où vous auriez déjà des lignes dans la table, ajoutez DEFAULT val
la source
Essaye ça:
la source