Изменить таблицу для ограничения внешнего ключа

У меня есть таблица, в которой есть 2 столбца, которые я скопировал из двух разных таблиц. Что я хочу сделать сейчас, это ограничение внешних ключей как по имени столбца, так и по имени, указанному ниже.

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;

Я получаю следующую ошибку:

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

Ответ 1

Вы не добавляете ограничение в этот оператор, вы добавляете constraint s: каждый из двух условий FOREIGN KEY означает отдельное ограничение. Тем не менее, в соответствии с руководством , вы должны иметь возможность добавить столько ограничений внешнего ключа в один оператор ALTER TABLE, сколько необходимо. Вам просто нужно включить ADD перед каждым ограничением.

Обратите внимание, что имена ограничений применяются индивидуально к ограничениям, которые вы добавляете, и поэтому вы можете указать CONSTRAINT name для второго внешнего ключа, если хотите, чтобы у него было определенное имя. То же самое с ON UPDATE/ON DELETE: они применяются к внешнему ключу, который непосредственно предшествует им.

Итак, исправленный оператор может выглядеть так:

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;