删除数据库行及其引用 - 最佳实践

时间:2009-12-03 18:48:39

标签: sql-server sql-server-2008 delete-row

如何删除许多其他表引用的行,作为主键还是作为外键?

我是否需要以适当的顺序删除每个引用,或者是否有“自动”方式来执行此操作,例如,linq to sql?

3 个答案:

答案 0 :(得分:5)

如果您通过存储过程执行所有数据访问,那么主存储器的删除存储过程应该处理这个问题。你需要在添加新的相关表时维护它,但IMO要求你考虑你正在做什么,这是一件好事。

就个人而言,我远离级联删除。当用户应该被警告现有的孩子时,很容易意外地删除大量的记录。

答案 1 :(得分:3)

很多时候,删除数据库中某些内容的最佳方法是通过设置IsDeleted列“虚拟”删除它,然后忽略所有其他查询中的行。

对于频繁链接的表,删除可能非常昂贵,并且在发生删除时锁可能导致其他查询失败。

您可以永久保留系统中的“IsDeleted”行(这可能对审核有帮助),或者在系统空闲时返回并删除它们。

答案 2 :(得分:1)

如果您使用ON DELETE CASCADE设置外键,它将使用DELETE master WHERE id =:x

来修剪您的数据库
相关问题