Как добавить столбец и сделать его внешним ключом в одном операторе MySQL? - PullRequest
58 голосов
/ 09 октября 2009

В mysql я могу добавить столбец и внешний ключ в одном выражении? И какой правильный синтаксис для добавления FK?

Вот мой SQL:

ALTER TABLE database.table
 ADD COLUMN columnname INT DEFAULT(1),
 FOREIGN KEY (fk_name) REFERENCES reftable(refcolumn) ON DELETE CASCADE;

... и соответствующее сообщение об ошибке:

В вашем синтаксисе SQL есть ошибка; проверьте правильность синтаксиса в руководстве, соответствующем вашей версии сервера MySQL, для использования рядом с 'FOREIGN KEY (fk_name) REFERENCES reftable (refcolumn) ON DELETE CASCADE' в строке 4

Ответы [ 4 ]

72 голосов
/ 09 октября 2009

Попробуйте это:

ALTER TABLE database.table
  ADD COLUMN columnname INT DEFAULT(1),
  ADD FOREIGN KEY fk_name(fk_column) REFERENCES reftable(refcolumn) ON DELETE CASCADE;
23 голосов
/ 24 декабря 2013

Следующий запрос добавляет столбец по запросу alter, и запрос ограничения делает его FK в одном запросе mysql. Вы можете сделать это так,

СИНТАКСИС:

ALTER TABLE `SCHEMANAME`.`TABLE1` 
ADD COLUMN `FK_COLUMN` BIGINT(20) NOT NULL, 
ADD CONSTRAINT `FK_TABLE2_COLUMN` FOREIGN KEY (`FK_COLUMN`) 
REFERENCES `SCHEMANAME`.`TABLE2`(`PK_COLUMN`);

Пример:

ALTER TABLE `USERDB`.`ADDRESS_TABLE` 
ADD COLUMN `USER_ID` BIGINT(20) NOT NULL AFTER `PHONE_NUMBER`, 
ADD CONSTRAINT `FK_CUSTOMER_TABLE_CUSTOMER_ID` FOREIGN KEY (`USER_ID`) 
REFERENCES `USERDB`.`CUSTOMER_TABLE`(`CUSTOMER_ID`); 
1 голос
/ 26 июня 2019

Это можно немного упростить. Вам просто нужно добавить ключевое слово «ADD» перед «FOREIGN KEY». Добавляем пример ниже.

ALTER TABLE database.table
ADD COLUMN columnname INT DEFAULT(1),
ADD FOREIGN KEY (fk_name) REFERENCES reftable(refcolumn) ON DELETE CASCADE;
0 голосов
/ 03 февраля 2018

Вы можете использовать его.

ALTER TABLE database.table
ADD COLUMN columnname INT DEFAULT(1);
ALTER TABLE database.table add FOREIGN KEY (fk_name) REFERENCES reftable(refcolumn) ON DELETE CASCADE;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...