Изменить таблицу, чтобы задать ограничение внешнего ключа - PullRequest
11 голосов
/ 27 февраля 2012

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

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 Ответ

33 голосов
/ 29 февраля 2012

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

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

Таким образом, исправленное утверждение может выглядеть следующим образом:

ALTER TABLE users_role_map

ADD CONSTRAINT FK_users_role_map<b>1</b>
FOREIGN KEY (email) REFERENCES usert(email)
<b>ON UPDATE CASCADE
ON DELETE CASCADE</b>,

<b>ADD CONSTRAINT FK_users_role_map2</b>
FOREIGN KEY (id) REFERENCES rolet(id)
ON UPDATE CASCADE
ON DELETE CASCADE;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...