添加外键约束时出现语法错误

Syntax error when adding foreign key constraint

我正在尝试为 type_id 列设置 DEFAULT 值和 NOT NULL,这是 instance table 的外键,但它在抱怨关于 MySQL 语法。

CREATE TABLE `type` (
  `id` int(10) unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `city` varchar(256)
); 

ALTER TABLE instance ADD COLUMN type_id int(10) unsigned NOT NULL;

ALTER TABLE instance ADD CONSTRAINT instance_xbf1 DEFAULT 1
FOREIGN KEY (type_id)
REFERENCES type(id) int(10) unsigned NOT NULL;

它在抱怨最后一条语句的语法:

Error: \"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DEFAULT 1\nFOREIGN KEY (type_id)\nREFERENCES type(id) int(10) unsi' at line 1\")", "stdout": "", "stdout_lines": [], "warnings": []}

您试图在 ADD CONSTRAINT 外键语句中做太多事情。

您可以通过两种方式添加默认值。作为列定义的一部分:

ALTER TABLE instance ADD COLUMN type_id int(10) unsigned NOT NULL DEFAULT 1;

或稍后在它自己的声明中:

ALTER TABLE instance ALTER type_id SET DEFAULT 1;

在外键中,您不能定义列的属性,例如数据类型、可空性、默认值等...

错误消息告诉您它不希望 DEFAULT 关键字作为 ADD CONSTRAINT 的一部分。如果您删除它,它会抱怨数据类型和可空性部分:int(10) unsigned NOT NULL 因为它也不期望这些。但无论如何你已经定义了它们。

因此,您的 ADD CONSTRAINT 可以简化为:

ALTER TABLE instance ADD CONSTRAINT instance_xbf1
FOREIGN KEY (type_id) REFERENCES type(id);