mysql - 为什么我不能以这种方式添加外键约束?

标签 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 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_id 列的类型相同 int(10) unsigned

更新 添加此键时,餐 table 邀请为空。 表关系有 3 行。

最佳答案

试试这个:

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

根据doc语法正确SQL FOREIGN KEY Constraint

关于mysql - 为什么我不能以这种方式添加外键约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17472309/

相关文章:

java - SQL - 锁定或不锁定 : selecting next unused code

mysql - 子查询和连接 - 无法绑定(bind)多部分标识符

sql - sp_OAGetProperty 返回 NULL,且 OUT 变量声明为 MAX

sql - 如何将 N 个数据库表与一个主表绑定(bind)?

c++ - OpenCV中数据库视频匹配的实现帮助

php - 为什么 php mysqli 不向 Xampp 中的数据库插入数据

mysql select as alias 从多个表

mysql - 从两个表中选择并求和数量(mysql)

mysql - 更新mysql中的多行?

php - 将 GIS 点批量转换为纬度/经度