ストアドプロシージャ使えない(面倒)、Rails Console利用できない場合にBulk Insertする例。すぐ忘れるのでメモ。
#!/bin/bash set -eu DB_USER="root" DB_PASS="pass" DB_NAME="db" DB_HOST="host" INSERT_NUM=100000 BREAK_NUM=1000 function execute_sql () { local sql=$1 mysql -u "${DB_USER}" -p"${DB_PASS}" -h "${DB_HOST}" "${DB_NAME}" -e "${sql}" } function main () { local insert_statement="INSERT INTO some_table (some_column)" insert_statement+=" VALUES" local bulk_count=0 for((i=0;i<INSERT_NUM;i++)); do if [ $bulk_count -eq 0 ]; then sql="${insert_statement}" else sql+=", " fi # values sql+="('some_value')" bulk_count=$(expr $bulk_count + 1) if [ $bulk_count -eq $BREAK_NUM ]; then execute_sql "${sql}" bulk_count=0 fi done # 端数のinsert if [ $bulk_count -ne 0 ]; then execute_sql "${sql}" bulk_count=0 fi } main
久しぶりにshell書くといろいろ辛く感じる。。 rubyで書けばよかった。。