mysql - "Foreign key constraint is incorrectly formed"尽管数据类型相同

标签 mysql sql foreign-keys mariadb

我想添加一个引用 Member.id 的外键 Enrols.mid,但经过几次尝试(添加索引、创建键、googleing)后它仍然是'工作。 两列具有完全相同的数据类型,为什么添加外键不起作用?

MariaDB [alumni]> alter table Enrols add foreign key (`mid`) references Member.id;
ERROR 1005 (HY000): Can't create table `alumni`.`#sql-31e_21d` (errno: 150 "Foreign key constraint is incorrectly formed")
MariaDB [alumni]> desc Member;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| id        | char(8)     | NO   | PRI |         |       |
| cName     | varchar(8)  | NO   |     | NULL    |       |
| eName     | varchar(40) | NO   |     | NULL    |       |
| gender    | char(1)     | NO   |     | NULL    |       |
| org       | varchar(40) | YES  |     | NULL    |       |
| pos       | varchar(20) | YES  |     | NULL    |       |
| hobby     | int(11)     | NO   |     | NULL    |       |
| issueDate | date        | NO   |     | NULL    |       |
| note      | text        | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
9 rows in set (0.01 sec)

MariaDB [alumni]> desc Enrols;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | YES  |     | NULL    |       |
| aid   | int(11) | NO   | PRI | NULL    |       |
| mid   | char(8) | NO   | PRI |         |       |
| paid  | date    | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
4 rows in set (0.01 sec)

MariaDB [alumni]> 

最佳答案

正如@Damien_The_Unbeliever 在他们的评论中所说,它应该是 references Member(id)

你的 . 语法意味着:reference table id in Schema Member(但你想引用 column id in table Member.

关于mysql - "Foreign key constraint is incorrectly formed"尽管数据类型相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42526511/

相关文章:

mysql - Rails 在 TEXT 列上使用 3 个破折号为插入和更新添加前缀

MySQL存储过程选择检查插入

mysql - 将文本从一个表插入到另一个表中

sql - 优化函数,它提取时间戳中具有最小间隙的记录

mysql_result 返回文件名作为结果

sql - 在生产 mysql 数据库上进行复杂模式更新的最简单方法是什么?

android - 房间 : deleting a ForeignKey or setting the ForeignKey to a default value

javascript - Onclick事件无法传入mysql

hibernate - 使用 JPA 与 Hibernate 提供程序的多对多关系不会创建主键

database - 使用外键创建 KDB+/Q 表