ChatGPT解决这个技术问题 Extra ChatGPT

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

在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) REFERENCES reftable(refcolumn) ON DELETE CASCADE' 附近使用正确的语法


A
Asaph

尝试这个:

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

对于 fk_namefk_column 我必须插入什么...?
@C4ud3x fk_name 将是一个名称,您希望为此特定约束提供标识(在查询中是可选的)mysql 也会自动生成它,并且 fk_column 是您希望用作外键的引用列。
我建议大家明确指定约束名称。如果您将来想删除该列,可能会遇到棘手的问题,并且您的系统已经在不同的数据库中运行,这些数据库对如何自动命名约束有不同的想法(例如,mariaDB 与 mySQL)。我想节省这一行代码并且没有指定约束,就像这里一样。在我付出代价几个月后,我尝试编写一个迁移来删除所有系统中的列。 stackoverflow.com/questions/55374835/…
L
Lucky

以下查询通过 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`);

例子:

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

这应该是选定的答案,因为这是使用约束名称 FK_CUSTOMER_TABLE_CUSTOMER_ID 创建外键的脚本。只有在提供 CONSTRAINT <CONSTRAINT-NAME> 时,我才能使用以下名称删除约束:ALTER <TABLE> DROP FOREIGN KEY <CONSTRAINT-NAME>
S
Satendra Rawat

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

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

R
Rosário Pereira Fernandes

你可以使用它。

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;