我正在尝试为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“:[],”警告“:[]}
答案 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);