数据库的
外键可以为空,也可以非空,但是如果非空,则这个值必须在主表中存在。
比如主表是一个班级,
主键是班级id,
字表是学生分配班级表,主键是学生id,外键是所在班级id。
如果一个学生的外键id为空,说明这个学生还没有被分配到任何一个班级
如果一个学生的外键id非空,并且是班级表中的某个id,则说明学生分配到这个班级
如果一个学生的外键id非空,并且不属于任何班级,则数据插入肯定报错。也就是说这种情况不存在。
--例子:
create table clerk(
id int,
name varchar2(10),
manager_id int);
alter table clerk add constraint pk_clerk_id
primary key(id);
alter table clerk add constraint fk_clerk_manager_id foreign key(manager_id) references clerk(id);
insert into clerk values (1, 'boss', null);
insert into clerk values (2, 'zhang', null);
insert into clerk values (3, 'zhang', 2);
--、下列语句报错,因为5不是主键的值
insert into clerk values (4, 'zhang', 5);
SQL> select * from clerk;
ID NAME MANAGER_ID
---------- ---------- ----------
1 yang
2 zhang
3 zhang 2
追问何时为空,是否是它不作为主键的时候?
追答上面已经说的很清楚了,什么时候都可以为空啊,为空就代表这个这个学生还没有分配到班级,所以子表的数据外键列如果为空,就说明业务上和主表上还没有关系。
看来你的数据库理论知识很差啊。建议你补补数据库理论知识。不然后期遇到个小问题你都不懂。