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