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

Mysql 添加外键约束时出现语法错误,mysql,sql,constraints,database-schema,ddl,Mysql,Sql,Constraints,Database Schema,Ddl,我试图为type_id列设置DEFAULT值和notnull,该列是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 i

我试图为
type_id
列设置
DEFAULT
值和
notnull
,该列是
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;
它正在抱怨最后一条语句的语法:

ALTER TABLE instance ALTER type_id SET DEFAULT 1;
错误:\“您的SQL语法有错误;请检查与您的MySQL服务器版本对应的手册,以了解在第1\”行的“默认1\n版本密钥(类型id)\n引用类型(id)int(10)unsi“,”标准输出“,”标准输出行“:[],”警告“:[])附近使用的正确语法


您试图在外键的
addconstraint
语句中执行太多操作

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

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约束的一部分。如果删除该关键字,它将抱怨数据类型和可空性部分:
int(10)unsigned not NULL
,因为它也不希望使用这些关键字。但您已经定义了它们

因此,您的
添加约束可以简化为:

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

实际的错误消息是什么?
它在抱怨mysql语法
这些抱怨包含非常具体的消息,确切地告诉您错误是什么。