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

时间:2017-04-13 18:34:34

标签: mysql sql constraints database-schema ddl

我正在尝试为DEFAULT列设置NOT NULL值和type_id,这是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类型(id)int附近使用正确的语法( 10)unsi'在第1行“”)“,”stdout“:”“,”stdout_lines“:[],”警告“:[]}

1 个答案:

答案 0 :(得分:1)

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