久保清隆のブログ

ライフハック、健康、旅行など、役立つ情報を書きます。

MySQLのデータを日付を条件に削除する方法 by Rails

MySQLのデータをRailsメソッドを用いて削除するには、

  • destroy
  • destroy_all
  • delete
  • delete_all

の4つがある。

この中で条件が指定できるのはdestroy_allとdelete_all。

destroy

destroyとdestroy_allがある。
ロードしたモデルオブジェクトを削除する。
その後に、freezeも行う。

destroy
hoge = Hoge.find(:first)
hoge.frozen? #=> false
hoge.destroy
hoge.frozen? #=> true

これで、hogeオブジェクトは削除される。


モデルオブジェクトのロードと削除も一気に行える。

Hoge.destroy([1,3])

これでid=1とid=3が削除される。
が、条件の指定などはできない。
そこで、destroy_allの出番。

destroy_all

destroy_allは、引数に検索条件を指定できる。

Hoge.destroy_all(["created_at < ?", "2009-02-15"])

これで、2009年2月15日より前のデータはすべて削除される。

しかし、大量のレコードを削除するのにはdestroy、destroy_allは向かない。
destroy、destroy_allは削除される時にコールバック(あるタイミングで自動で実行される処理)を呼び起こすからである。

大量のレコードを削除するにはdelete、delete_allを用いる。

delete

deleteとdelete_allはSQLのDELETEを直接実行するので動作が早い。
従って大量のデータを削除するにはdelete、delete_allが向いている。

delete

delete(id)と書いてidにあたるレコードを削除する。

Hoge.delete([1,2,3])

これでid=1、2、3のレコードは削除される。
ここでも、条件指定はできない。
条件指定をするにはdelete_allを使う。

delete_all

削除する条件を指定できる。

Hoge.delete_all(["created_at < ?", "1.day.ago"])

これで昨日より前のレコードを削除することが出来る。



お読み頂きありがとうございます。
少しでもお役に立てたらクリックお願いします↓。
ブログランキング・にほんブログ村へにほんブログ村 IT技術ブログへにほんブログ村 IT技術ブログ プログラム・プログラマへ