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

数据库的外键何时允许为空?何时不为空?,第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

以sqlserver数据库为例,解决方案:

1、点击数据库表右键的【设计】;

2、把影响到的列改成允许为空;

3、点击【保存】。

原因:SQL存储过程语法可能是正确的,因为语法并没有对表结构内部字段是否非空进行验证,只有执行了才知道。可以选择编辑前200行,看一下是不是新增了列,但是列里面的值是null,然后又在设置的列里面不允许有null,这样就不允许保存了。

扩展资料:

SQL Aggregate 函数计算从列中取得的值,返回一个单一的值。

有用的 Aggregate 函数:

AVG() - 返回平均值,COUNT() - 返回行数,FIRST() - 返回第一个记录的值

LAST() - 返回最后一个记录的值,MAX() - 返回最大值,MIN() - 返回最小值,SUM() - 返回总和。

SQL Scalar 函数基于输入值,返回一个单一的值。

有用的 Scalar 函数:

UCASE() - 将某个字段转换为大写,LCASE() - 将某个字段转换为小写,MID() - 从某个文本字段提取字符

LEN() - 返回某个文本字段的长度,ROUND() - 对某个数值字段进行指定小数位数的四舍五入,NOW() - 返回当前的系统日期和时间,FORMAT() - 格式化某个字段的显示方式。

参考资料:百度百科——sql


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存