错误1215(HY000):无法添加外键约束。尝试了很多次

时间:2019-10-05 15:55:07

标签: mysql sql

我在为我的表设置foriegn键时遇到问题,这里是图片

我尝试更改父表中列的数据类型和约束,但无济于事

这是教职员工表:-

+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| Fid        | varchar(20) | NO   | PRI | NULL    |       |
| F_name     | varchar(20) | YES  |     | NULL    |       |
| Department | varchar(20) | YES  |     | NULL    |       |
| Subject    | varchar(20) | YES  |     | NULL    |       |
| Subject_id | int(11)     | NO   |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+

这是我要创建的子表:-

create table module(Subject_id int(11), 
                    Subject varchar(20), 
                    module_1 blob, 
                    module_2 blob, 
                    module_3 blob, 
                    module_4 blob, 
                    module_5 blob, 
                    foreign key (Subject_id) references faculty(Subject_id));

我收到此错误:-

  

错误1215(HY000):无法添加外键约束

1 个答案:

答案 0 :(得分:0)

在表module中,您将subject_id列设置为可空(即,它可以采用NULL值)。但是,在父表faculty中,subject_id不可为空。也使subject_id在子表中也不能为空:

CREATE TABLE module (
    Subject_id INT(11) NOT NULL,
    Subject VARCHAR(20), 
    module_1 BLOB, 
    module_2 BLOB, 
    module_3 BLOB, 
    module_4 BLOB, 
    module_5 BLOB, 
    FOREIGN KEY (Subject_id) REFERENCES faculty(Subject_id)
);

作为一般规则,外键和父键类型必须完全一致。这在MySQL上并不总是必须的,它可能比较松懈,但您仍应尽可能遵守此规则。