添加外键约束时出现语法错误
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);
我正在尝试为 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);