繁体   English   中英

添加外键约束时的语法错误

[英]Syntax error when adding foreign key constraint

我试图为type_id列设置DEFAULT值和NOT NULL ,这是instance表的外键,但是它抱怨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;

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

错误:\\“您的SQL语法有错误;请检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在'DEFAULT 1 \\ nFOREIGN KEY(type_id)\\ nREFERENCES type(id)int(10)unsi附近使用'位于第1行\\“)”,“ stdout”:“”,“ stdout_lines”:[],“警告”:[]}

您正在尝试在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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM