正在研究数据库类分配简介,并在一些外键上遇到麻烦。我已经做了一些外键,但时不时地我会被难住,不明白为什么它不起作用。
这个例子是一个大学数据库,我有一个部分
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 | |
+--------------+-------------+------+-----+---------+-------+
我正在尝试创建一个需要数据库,并且能够为 ID
和 course_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
,这似乎完全相同?
最佳答案
可能性:
- 数据类型(包括无符号数据类型)不匹配。
- 父字段未编入索引。
如果数据类型匹配,则可能您尚未在要定义外键关系的父列上定义索引。请检查表section
中的列sec_id
是否定义了任何索引。
引用:
关于mysql - 定义外键时遇到问题 (MySQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22188061/