我在为我的表设置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):无法添加外键约束
答案 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上并不总是必须的,它可能比较松懈,但您仍应尽可能遵守此规则。