删除操作是我们开发中经常会遇到的一个问题,而关联删除也是其中常遇到的一种情况,下边是一个小例子来说明允许外键为空值的情况.
数据库表为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字段建立外键关系.
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, 即外键数据为空的时候,就允许删除操作了.
本文通过实例探讨了在数据库操作中,当外键存在数据时如何避免删除操作引发的冲突,以及如何通过手动调整数据实现关联删除。
1128

被折叠的 条评论
为什么被折叠?



