web-dev-qa-db-fra.com

Modifier la table pour donner une contrainte de clé étrangère

J'ai une table qui a 2 colonnes que j'ai copiées à partir de deux tables différentes. Ce que je veux faire maintenant, c'est donner une contrainte de clé étrangère sur les noms de colonne email et id indiqués ci-dessous.

ALTER TABLE users_role_map
ADD CONSTRAINT FK_users_role_map
FOREIGN KEY (email) REFERENCES usert(email),
FOREIGN KEY (id) REFERENCES rolet(id)
ON UPDATE CASCADE
ON DELETE CASCADE;

J'obtiens l'erreur suivante:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'FOREI
GN KEY (id) REFERENCES rolet(id)
ON UPDATE CASCADE
ON DELETE CASCADE' at line 4
12
luckysing_noobster

Vous n'ajoutez pas de contrainte dans cette instruction, vous ajoutez contraintes: chacune des deux clauses FOREIGN KEY signifie une contrainte distincte. Pourtant, selon le manuel , vous devriez être en mesure d'ajouter autant de contraintes de clé étrangère dans une seule instruction ALTER TABLE que nécessaire. Il vous suffit d'inclure ADD avant chaque contrainte.

Notez que les noms de contrainte s'appliquent individuellement aux contraintes que vous ajoutez, et vous pouvez donc spécifier CONSTRAINT name pour la deuxième clé étrangère si vous voulez qu'elle ait un nom spécifique. Même avec ON UPDATE/ON DELETE: ils s'appliquent à la clé étrangère qui les précède directement.

Ainsi, la déclaration corrigée pourrait ressembler à ceci:

ALTER TABLE users_role_map

ADD CONSTRAINT FK_users_role_map1
FOREIGN KEY (email) REFERENCES usert(email)
ON UPDATE CASCADE
ON DELETE CASCADE,

ADD CONSTRAINT FK_users_role_map2
FOREIGN KEY (id) REFERENCES rolet(id)
ON UPDATE CASCADE
ON DELETE CASCADE;
33
Andriy M