MySQL - 添加外键错误

标签 mysql

我正在尝试向列中添加外键,但出现以下错误:

(errno: 150 "Foreign key constraint is incorrectly formed")

=> 我检查的是,列是否有一些不同的类型但它们是相同的。

=> 因此,来自 tbl_user 的权限是外键,应该引用来自 tbl_userrights 的 rights_id

=> 我使用的代码:

ALTER TABLE tbl_user ADD CONSTRAINT FK_RIGHTS_ID FOREIGN KEY (rights) REFERENCES rights_id(id);

tbl_user:

#   Name    Typ     Kollation   Attribute   Null    Standard    Extra
1   id      int(11)                         No                  AUTO_INCREMENT

2   rights  int(11)                         No  

tbl_userrights:

 #  Name        Typ     Kollation   Attribute   Null    Standard    Extra
1   rights_id   int(11)                         No                  AUTO_INCREMENT

2   rights      varchar(50)                     No  

最佳答案

您的FOREIGN KEY 定义不完全正确。模式是:

FOREIGN KEY (referencing_columns) REFERENCES referenced_table (referenced_columns)

所以在你有REFERENCES rights_id(id)的地方,你实际上应该使用

ALTER TABLE tbl_user
  ADD CONSTRAINT FK_RIGHTS_ID 
  FOREIGN KEY (rights) REFERENCES tbl_userrights (rights_id)

参见 the FOREIGN KEY documentation syntax reference有关语法选项的完整详细信息。

您检查数据类型是否匹配是正确的,这是一个常见错误(在引用表存在或在引用列上有索引之前尝试创建 FK 也很常见),但这次只是归结为句法。

关于MySQL - 添加外键错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34694413/

相关文章:

php - 将 WHERE 和 GROUP BY 合并到日期时间总和 MySQL 查询中

mysql - 并行运行处理器时,我应该如何选择下一个要处理的项目?

mysql - 随机 "Lost connection to MySQL server at '读取初始通信包',系统错误: 110"

MySQL集群数据/SQL节点在ndbd下连接但在mysqld下不连接

MYSQL - 使用“选择”时未得到与“使用数字”相同的结果

php - 使用 PHP 将 MySQL 转换为 Mongodb 时出现编码问题

mysql - 将多行 MySQL 行转换为多列和单行

php - 从 paypal 付款返回站点期间 mysql 插入查询的问题

Python MYSQL 数据插入两次

mysql - 如何合并两个表 A 和 B,但 B 缺少一列,而结果应该包含所有列?