如何删除许多其他表引用的行,作为主键还是作为外键?
我是否需要以适当的顺序删除每个引用,或者是否有“自动”方式来执行此操作,例如,linq to sql?
答案 0 :(得分:5)
如果您通过存储过程执行所有数据访问,那么主存储器的删除存储过程应该处理这个问题。你需要在添加新的相关表时维护它,但IMO要求你考虑你正在做什么,这是一件好事。
就个人而言,我远离级联删除。当用户应该被警告现有的孩子时,很容易意外地删除大量的记录。
答案 1 :(得分:3)
很多时候,删除数据库中某些内容的最佳方法是通过设置IsDeleted列“虚拟”删除它,然后忽略所有其他查询中的行。
对于频繁链接的表,删除可能非常昂贵,并且在发生删除时锁可能导致其他查询失败。
您可以永久保留系统中的“IsDeleted”行(这可能对审核有帮助),或者在系统空闲时返回并删除它们。
答案 2 :(得分:1)
如果您使用ON DELETE CASCADE设置外键,它将使用DELETE master WHERE id =:x
来修剪您的数据库