依靠 MySQL Cascade 进行删除是否安全

Mus*_*00m 4 php mysql innodb laravel

我正在使用 PHP Laravel 框架,但这是一个通用的 PHP 问题。在删除级联上使用 MySQL 外键关系删除相关行是否安全?还是在 PHP 中执行此操作是最佳实践?我发现级联系统非常好,但不知道使用它是否安全?任何最佳做法?

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

感谢您的反馈。

sup*_*ova 5

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

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

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