如何在单个MySQL语句中添加列并使其成为外键?


81

在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服务器版本相对应的手册以获取正确的语法,以在第4行的“ FOREIGN KEY(fk_name)参考引用reftable(refcolumn)ON DELETE CASCADE”附近使用

Answers:


96

试试这个:

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_namefk_column我必须插入wh语...?
C4d

7
@ C4ud3xfk_name将是您想要赋予此特定约束以进行识别(在查询中为可选)的名称,mysqlfk_column也会自动生成该名称,并且它是您要用作外键的引用列。
Rabia Naz khan 2015年

1
我建议大家明确指定约束名称。如果您想将来删除该列,可能会遇到麻烦的问题,并且系统已经在不同的数据库中运行,这些数据库对如何自动命名约束有不同的想法(例如,mariaDB与mySQL)。我想保留这一行代码,并且没有像在这里那样指定约束。几个月后,我试图编写一个会在所有系统中删除该列的迁移,为此付出了代价。stackoverflow.com/questions/55374835/...
Alkis Mavridis

37

以下查询通过alter查询添加一列,而约束查询使它在单个mysql查询中成为FK。你可以这样

句法:

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`); 

2

这可以简化一点。您只需要在“ FOREIGN KEY”之前添加“ ADD”关键字。在下面添加示例。

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;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.