我使用的是PHP Laravel Framework,但它是一个普通的PHP问题。在删除级联上使用MySQL外键关系删除相关行是否安全?或者用PHP做最好的做法?我发现级联系统真的很好但不知道它是否安全使用它?任何最佳做法?
例如,如果您的用户已创建帖子且该用户已被删除,您是否使用PHP删除其帖子然后删除该用户,或者只使用级联?
感谢您的反馈。
答案 0 :(得分:3)
是的,您可以依赖CASCADE删除。如果使用ON DELETE CASCADE定义关系,则肯定会删除foriegn行。绝对推荐使用ON DELETE CASCADE(假设您要删除相关行),它可能比在您的应用程序中实现删除级联更可靠。
在您给出的示例中,包含用户帖子的行与使用ON DELETE CASCADE的外键的用户相关。在这种情况下,您只需删除该用户。 MySQL将遵循所有关系并删除所有相关行。这将防止孤立的数据。通过应用程序执行此操作更具风险"就孤儿数据的可能性而言。
但是,请记住,如果相同数据存在其他关系(例如,有关于将要删除的用户帖子的回复帖子),则可以阻止删除,因为参考在回复行中将是悬空。当然,这完全取决于您的数据库设计以及如何设置外键。