mysql - 定义外键时遇到问题 (MySQL)

标签 mysql foreign-keys

正在研究数据库类分配简介,并在一些外键上遇到麻烦。我已经做了一些外键,但时不时地我会被难住,不明白为什么它不起作用。

这个例子是一个大学数据库,我有一个部分

describe section;
+--------------+-------------+------+-----+---------+-------+
| Field        | Type        | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| course_id    | varchar(7)  | NO   | PRI |         |       |
| sec_id       | varchar(10) | NO   | PRI |         |       |
| semester     | varchar(10) | NO   | PRI |         |       |
| year         | int(11)     | NO   | PRI | 0       |       |
| building     | varchar(20) | YES  | MUL | NULL    |       |
| room_no      | varchar(5)  | YES  |     | NULL    |       |
| time_slot_id | varchar(5)  | YES  | MUL | NULL    |       |
+--------------+-------------+------+-----+---------+-------+

我正在尝试创建一个需要数据库,并且能够为 IDcourse_id 创建外键,但我尝试的任何其他数据库都不起作用

create table takes(
  ID int, 
  course_id varchar(7), 
  sec_id varchar(10), 
  semester varchar(10), 
  year int, 
  grade int, 
  primary key (course_id, sec_id, semester, year), 
  foreign key (ID) references student(ID)
    on delete cascade on update cascade, 
  foreign key (course_id) references section(course_id) 
    on delete cascade on update cascade
) engine = innodb;

到目前为止,它都有效。 如果我尝试添加它,它会给我 errno: 150

foreign key (sec_id) 
  references section(sec_id) 
  on delete cascade on update cascade

感谢任何帮助。我想我可能遗漏了一些关于外键的基本知识,因为它适用于 course_id 但不适用于 sec_id,这似乎完全相同?

最佳答案

可能性:

  1. 数据类型(包括无符号数据类型)不匹配。
  2. 父字段未编入索引。

如果数据类型匹配,则可能您尚未在要定义外键关系的父列上定义索引。请检查表section中的列sec_id是否定义了任何索引。

引用:

关于mysql - 定义外键时遇到问题 (MySQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22188061/

相关文章:

mysql - 如何在 Sphinx 中连接两个索引(无索引合并)?

javascript - 从 mySql 数据库在 php 中返回 JSON

MySQL 外键 + 将键放在哪个表上

mysql - 在插入另一个表后触发更新表

mysql - 使用结果中的值来避免双重 MySQL 查询

sql - 如何提取一列数据并用外键替换?

Django 表单未使用 ModelChoiceField 保存 -foreignkey

mysql - 为什么 MySQL 不接受我的外键?

mysql - 对象不是与nodejs一起使用的mysql db中的函数

Mysql通过外键连接表,取决于字段类型