删除操作是我们开发中经常会遇到的一个问题,而关联删除也是其中常遇到的一种情况,下边是一个小例子来说明允许外键为空值的情况.
数据库表为group(用户组)/user(用户表),表关系为一对多,user表中Group_Gid与group表中Gid字段建立外键关系.
user表
group表
user表数据
group表数据
下面代码我要删除用户组gid为2的user用户组,从上边的user表中可以看出大部分用户都属于user组.
不用多说这段代码肯定会报异常: DELETE 语句与 REFERENCE约束"FK_Users_Groups_Group_Gid"冲突。该冲突发生于数据库"users",表"dbo.Users",column 'Group_Gid'。 语句已终止。
原因当然是名为"User"的用户组外键存在数据,此时当然不允许进行删除操作.除非你查询到所有"多"的数据,把它保存给"一",然后执行删除操作,则可以成功.
user表删除后结果
group表删除后结果
下面我手动在group表中增加一条数据Test用户组,gid为4,把gid换成user表中没有外键数据的4, 即外键数据为空的时候,就允许删除操作了.
数据库表为group(用户组)/user(用户表),表关系为一对多,user表中Group_Gid与group表中Gid字段建立外键关系.
![](https://img-my.csdn.net/uploads/201206/07/1339037295_3290.png)
user表
![](https://img-my.csdn.net/uploads/201206/07/1339037309_2079.png)
group表
![](https://img-my.csdn.net/uploads/201206/07/1339037312_3103.png)
user表数据
![](https://img-my.csdn.net/uploads/201206/07/1339037317_3524.png)
group表数据
下面代码我要删除用户组gid为2的user用户组,从上边的user表中可以看出大部分用户都属于user组.
![](https://img-my.csdn.net/uploads/201206/07/1339037321_1541.jpg)
不用多说这段代码肯定会报异常: DELETE 语句与 REFERENCE约束"FK_Users_Groups_Group_Gid"冲突。该冲突发生于数据库"users",表"dbo.Users",column 'Group_Gid'。 语句已终止。
原因当然是名为"User"的用户组外键存在数据,此时当然不允许进行删除操作.除非你查询到所有"多"的数据,把它保存给"一",然后执行删除操作,则可以成功.
![](https://img-my.csdn.net/uploads/201206/07/1339037329_2737.jpg)
![](https://img-my.csdn.net/uploads/201206/07/1339037337_8187.png)
user表删除后结果
![](https://img-my.csdn.net/uploads/201206/07/1339037341_8962.png)
group表删除后结果
下面我手动在group表中增加一条数据Test用户组,gid为4,把gid换成user表中没有外键数据的4, 即外键数据为空的时候,就允许删除操作了.
![](https://img-my.csdn.net/uploads/201206/07/1339037345_5477.png)
![](https://img-my.csdn.net/uploads/201206/07/1339037356_8205.jpg)