数据库的外键何时允许为空?何时不为空?

数据库的外键何时允许为空?何时不为空?,第1张

数据库的外键可以为空,也可以非空,但是如果非空,则这个值必须在主表中存在。

比如主表是一个班级,主键是班级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

主键字段可以允许为null,但是不代表其中所有的值都能为null,这个需要应用上进行处理的,这个字段id值是没有空值的,这样字段是否允许非空就没有意义了,像这种定义方式应该定义结构的人没有好好地深思熟虑的,针对主键字段定义为非空是非常有必要的,可以提升数据库的效率。像这种情况,该字段上只允许一条记录中为null,否则会报错的。

允许该字段在添加数据时可不填数据,默认为null

比如你的table有以下三个字段aa,bb,cc,其中cc允许空

则你在插入数据时可这样写,不会出错

insert into table values('11','22')


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9634526.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存