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

Vin*_*ieP 64 mysql sql

在mysql中,我可以在同一个语句中添加列和外键吗?添加fk的正确语法是什么?

这是我的SQL:

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

...以及随附的错误消息:

您的SQL语法有错误; 查看与您的MySQL服务器版本对应的手册,以便在第4行使用'FOREIGN KEY(fk_name)REFERENCES reftable(refcolumn)ON DELETE CASCADE'附近使用正确的语法

Asa*_*aph 82

试试这个:

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

  • @ C4ud3x`fk_name`将是一个你想要为识别目的给出这个特殊约束的名称(在查询中是可选的)mysql也自动生成它,而`fk_column`是你想要作为外键工作的引用列. (6认同)
  • 对于`fk_name`和`fk_column`,我必须插入whaat ......? (5认同)
  • 我建议每个人都明确指定约束名称。如果您想在将来删除该列,就会遇到令人讨厌的问题,并且您的系统已经在不同的数据库中运行,这些数据库对如何自动命名约束(例如,mariaDB 与 mySQL)有不同的想法。我想省去这一行代码并且没有指定约束,就像这里一样。在我付出代价的几个月后,我试图编写一个迁移来删除所有系统中的列。/sf/ask/3876238481/ (2认同)

Luc*_*cky 27

以下查询通过alter query添加列,约束查询使其成为单个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`);
Run Code Online (Sandbox Code Playgroud)

例:

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`); 
Run Code Online (Sandbox Code Playgroud)


Sat*_*wat 7

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

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