依靠MySQL级联进行删除是否安全



我使用的是PHP Laravel框架,但这是一个一般的PHP问题。在删除级联上使用MySQL外键关系删除相关行是否安全?还是在 PHP 中执行此操作的最佳实践?我发现级联系统很好,但不知道使用它是否安全?有什么最佳实践吗?

例如,当您有一个用户创建了帖子并且该用户被删除时,您是使用 PHP 删除他的帖子然后删除该用户,还是仅使用级联?

感谢您的反馈。

是的,您可以依靠级联删除。 如果使用 ON DELETE CASCADE 定义关系,则肯定会删除外线行。 绝对建议使用 ON DELETE CASCADE(假设您要删除相关行),它可能比在应用程序中实现删除级联更可靠。

在您给出的示例中,包含用户帖子的行与使用外键的用户相关 ON DELETE CASCADE。 在这种情况下,您只需删除用户。 MySQL将遵循所有关系并删除所有相关行。 这将防止孤立数据。 就孤立数据的可能性而言,通过应用程序执行此操作的风险要大得多。

但是请记住,如果与同一数据存在其他关系(例如,存在与将要删除的用户帖子相关的回复帖子),则可以阻止删除,因为回复行中的引用将悬而未决。 当然,这完全取决于您的数据库设计和设置外键的方式。

最新更新