大家好我正在注意从父表中删除一行时遇到问题,我已经创建了2个表客户和account.i在客户和客户ID(forigen key)中创建了cutomer id(主键) 。在创建之后,我在两个表中都填充了数据。 在这一点上,当我试图从第一个表(客户)删除一行,然后它给失败的消息是,它不能被删除bcs它是作为forigen键refrenced一些像那样的东西......... ...但是当我们从帐户表中删除行时,它就完全删除了成功。 .......我希望功能就像那样,如果我从父表(客户)删除一行然后它在子表中具有相同客户ID(帐户表)的行被自动删除....... .....
答案 0 :(得分:4)
注意级联删除!用户会不小心点击应用程序的小垃圾桶图标并删除客户,然后所有级联将从您的数据库中删除该客户,订单,发票,付款,历史记录等的每一条痕迹。在用户打电话告诉您他们的小错误之后,您将必须恢复备份并尝试将信息拉回数据库。
我会查看“软删除”,您只会将客户的状态从“活动”更改为“非活动”。不删除行,保留所有外键数据。这允许报告在数据上运行,因为它仍然存在,并且很容易“撤消”。
软删除不是最终的唯一方法,它是如何处理此问题,清除数据或将其标记为非活动的业务决策。这只是你可以决定的事情,因为我不知道你的应用程序或业务逻辑。我只是认为我会提供它作为替代方案。
答案 1 :(得分:1)
您需要使用on delete cascade
设置外键才能实现此目的。
对于SQL Server 2008,请参阅文章Cascading Referential Integrity Constraints
编辑只是为了添加一个有点多余的健康警告,您应该知道添加on delete cascade
意味着当您从父表中删除行时,子表中的相关行将是删除。但是,这正是你所说的你想要的行为,我看不出这是一个问题。