全栈工程师成长记

编程重新定义人生

Rails 中 delete_all 和 destroy_all 的用法区别

在Rails里批量删除表格数据有 delete_all 和destory_all 两种方法,虽然它们达到的效果一样,但实现过程却不一样。

delete_all 是一条sql语句删除,它会直接执行删除而不查询数据,优点是网络开销相对少,缺点是如果删除出现问题,回滚起来代价比较大。

destroy_all 则先查出所有的数据,再一条一条的按照主键删除,优点是容易过程出现问题容易终止,缺点是网络开销比较大。

同样的数据量,delete_all 删除的速度更快,因此在什么情况下选用哪种方法,一是可以根据对执行过程的速度需求决定,二是根据对数据安全的需求决定。

代码运行过程参考这里