数据库的外键支不支持空值?


FOREIGN KEY 约束允许空值

测试sql语句如下:

现建立了一个临时数据库tempdb

 

1: 先执行下列语句创建两个表:

 

create table zhuhu

(

oid INT IDENTITY(1,1) PRIMARY KEY   NOT NULL,

zhuhuname char(20), )

 

 

create table yezhu

(

oid INT IDENTITY(1,1) PRIMARY KEY   NOT NULL,

yezhuhao char(20),

zhuhuhao int foreign key references  zhuhu, )

 

2: 然后向两个表中各插入一行数据

insert into zhuhu

( zhuhuname) values( 'duoduo')   // 添进去后, oid为1.

 

insert into yezhu

(yezhuhao, zhuhuhao) values('haodongxi',1)

 

3: 然后进行删除测试:

delete from zhuhu

where oid = 1

 

报告 删除出错, 出错信息如下:

服务器: 消息 547,级别 16,状态 1,行 1

DELETE 语句与 COLUMN REFERENCE 约束 'FK__yezhu__zhuhuhao__681373AD' 冲突。该冲突发生于数据库 'tempdb',表 'yezhu', column 'zhuhuhao'。

语句已终止。

 

错误分析: 外键关联不允许级联删除, 如果在住户表中删除了oid为1的行, 那么就违反了业主表中的参照这一行的外键约束. 所以删除失败.

 

 

为了达到只删除被参照表的目的, 我们有进行了下面的测试,

4: 在进行yezhu表中插入一个外键值为null的行:

insert into yezhu

(yezhuhao, zhuhuhao) values('haodongxi',null)

执行成功, (因为这个表的外键字段允许为null)

 

5: 执行下列更新语句:

update yezhu

set zhuhuhao  = null

where zhuhuhao  =1

将参考了待删除的行的外键参考置为null

 

6: 删除:

delete from zhuhu

where oid = 1

 

成功:

 

其实这个检查是有问题的,

数据库对存在外键参考的值的删除有三种处理方式, 1: 级联删除, 2:置空值 3: 不允许删除.

 sql server默认的外键参考关系有一个叫做强制外键约束的属性, 这个属性的默认值为true, 当强制外键约束的值为true是, 是不允许空值的, 如果把这个值改为false, 那么就可以删除了, 删除后, sqlserver会自动把参考这个记录的所有字段都置为null.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值