Як додати стовпець і зробити його зовнішнім ключем в одному операторі MySQL?


82

У 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, на правильний синтаксис, який слід використовувати поблизу „ЗОВНІШНІЙ КЛЮЧ (fk_name) ДОВІДКИ ПОСИЛАННЯ reftable (refcolumn) ON DELETE CASCADE“ у рядку 4

Відповіді:


98

Спробуйте це:

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

6
А для fk_nameі fk_columnя повинен вставити whaat ...?
C4d

7
@ C4ud3x fk_name- це ім'я, яке ви хотіли б надати цьому конкретному обмеженню з метою ідентифікації (що необов'язково у запиті), mysql також автоматично його генерує, і fk_columnє посилальним стовпцем, який ви хочете використовувати як зовнішній ключ.
Rabia Naz khan

1
Я б порадив усім чітко вказати назву обмеження. Неприємні проблеми можуть знайти вас, якщо ви захочете видалити цей стовпець у майбутньому, і ваша система вже працює в різних базах даних, які мають різні ідеї щодо того, як автоматично називати обмеження (наприклад, mariaDB проти mySQL). Я хотів пошкодувати цей один рядок коду і не вказав обмеження, як тут. Через кілька місяців після того, як я заплатив ціну, намагаючись написати міграцію, яка б видалила стовпець у всіх системах. stackoverflow.com/questions/55374835/…
Alkis Mavridis

39

Наступний запит додає стовпець за запитом 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`); 

3

Це можна трохи спростити. Вам просто потрібно додати ключове слово "ДОДАТИ" перед "ІНОЗЕМНИЙ КЛЮЧ". Додавши приклад нижче.

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

-3

Ви можете ним скористатися.

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;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.