Mysql 为什么可以';我不能这样添加外键约束吗?

Mysql 为什么可以';我不能这样添加外键约束吗?,mysql,sql,database,foreign-keys,Mysql,Sql,Database,Foreign Keys,表: CREATE TABLE `relation` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(40) NOT NULL, `gender` tinyint(1) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `unique_relation` (`name`) ) ENGINE=InnoDB DEFA

表:

    CREATE TABLE `relation` (
     `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
     `name` varchar(40) NOT NULL,
     `gender` tinyint(1) DEFAULT NULL,
     PRIMARY KEY (`id`),
     UNIQUE KEY `unique_relation` (`name`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8

    CREATE TABLE `invite` (
     `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
     `date_sent` date NOT NULL,
     `user_id` int(10) unsigned NOT NULL,
     `relation_id` int(10) unsigned NOT NULL,
     `email` varchar(255) NOT NULL,
     `code` varchar(255) NOT NULL,
     PRIMARY KEY (`id`),
     KEY `fk_user` (`user_id`),
     CONSTRAINT `fk_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
执行的SQL语句为:

ALTER TABLE `invite` 
ADD CONSTRAINT `fk_relation`  
FOREIGN KEY (`relation_id`) 
REFERENCES `relation` (`id`) 
ON DELETE CASCADE ON UPDATE RESTRICT
Mysql错误:

SQLSTATE[HY000]:一般错误:1005无法创建表“dbtest.#sql-d00_39”(错误号:121)。

relation.idinvite.relation\u id列的类型相同,int(10)为无符号

更新 添加此键时,表invite为空。 表关系有3行。

请尝试以下操作:

ALTER TABLE invite
ADD CONSTRAINT fk_relation
FOREIGN KEY (relation_id)
REFERENCES relation(id)

根据doc语法是否正确

现在,用于创建外键的DDL自动包含用于指定“删除”和“更新”操作的语句。但是,对于“Delete”,它包含“ON Delete RESTRICT”语句,该语句似乎不是有效的T-SQL语句

试试这个:

通过选中添加约束fk_关系更改表invite 外键(关系\ id)引用关系(id)


实际上,invite表是空的吗?

ALTER TABLE invite WITH CHECK ADD CONSTRAINT fk_relation FOREIGN KEY (relation_id) REFERENCES relation (id)