mala さんのMySQLにおけるbulk insert と bulk update - 金利0無利息キャッシング –
キャッシングできます - subtechのエントリーを見て, MySQL
でbulk update ができることを知り, 丁度欲しい機能だったのでとりあえず動くだけのメソッドを実装.
# User.extend BulkExecuteMethods
# User.update_multi([:id, :name, :age], [[1, 'bob', 11], [2, 'mary', 21]])
#
# refs
# http://dev.mysql.com/doc/refman/4.1/ja/insert.html
# http://subtech.g.hatena.ne.jp/mala/20090729/1248880239
module BulkExecuteMethods
def update_multi(columns, values)
cols = columns.map{|c| self.connection.quote_column_name(c) }
ph = (['(?)'] * values.size).join(',')
vals = sanitize_sql([ph, *values])
expr = cols.map{|c| "#{c}=VALUES(#{c})" …[さらに読む]