【MySQL】SQLを外部ファイルから実行する方法
2019/03/01
データベースに登録されているデータが(運用の都合上から)あまりにおかしな具合になっていたので、15,000件ほどを手で修正し、アップデートするというアホな作業を経験してしましました。
その際、テキストファイルにアップデート用SQLを書き、MySQLからそのファイルを指定して実行するということをしたので、その方法を備忘録としてポストしておきます。
1. 外部ファイルにSQLを書く
まずはテキストファイルに実行したい内容のSQLを書きます。
今回は UPDATE 文でしたが、INSERT 文でも DELETE 文でも実行可能だと思います。
日本語を扱う際は必ず、データベースと同じ文字コードで保存すること。
私の場合(多くはそうだと思いますが)は UTF-8 です。
1 2 3 4 5 |
UPDATE `users` SET position='班長', employee_name='香川 和哉', name_kana='カガワ カズヤ' WHERE id = '1'; UPDATE `users` SET position='', employee_name='菊池 喜久子', name_kana='キクチ キクコ' WHERE id = '5'; UPDATE `users` SET position='', employee_name='久米島 公美', name_kana='クメシマ クミ' WHERE id = '6'; UPDATE `users` SET position='取締役', employee_name='剣崎 賢治', name_kana='ケンザキ ケンジ' WHERE id = '8'; UPDATE `users` SET position='', employee_name='近藤 康介', name_kana='コンドウ コウスケ' WHERE id = '9'; |
「sqlfile.txt」として、任意のパスへ保存。
2. コンソールからmysqlへ接続
コンソール(今回はDOSプロンプト)から、mysql に接続します。
show databases; でデータベース一覧を表示。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
mysql> show databases; +---------------------------+ | Database | +---------------------------+ | information_schema | | aagce9_gw | | aagce9_test | | albeitshift | | bta002_mar | | dailyreport | | enquetesurvey | | groupware | | mroundcube | | mizuame_antenna | | mizuame_quiz | | multievaluation | | mysql | | nodoame_develop | | outsideorder | | teleapo | | test | | toogiedevelop | +---------------------------+ 18 rows in set (1.40 sec) |
use コマンドで、扱うデータベースを指定します。
1 2 |
mysql> use toogiedevelop; Database changed |
これで「toogiedevelop」データベースを取り扱うこととなります。
テーブルの一覧は show tables; で取得可能。
1 2 3 4 5 6 7 8 9 |
mysql> show tables; +-------------------------+ | Tables_in_toogiedevelop | +-------------------------+ | places | | trips | | users | +-------------------------+ 3 rows in set (0.00 sec) |
3. sourceコマンドでファイルに記述したSQLを実行
1 2 3 4 |
mysql> source C:\path\to\file\sqlfile.txt Query OK, 10 row affected(0.03 sec) mysql > |
以上で完了です。簡単。
10件ぐらいですと1秒かからずに実行完了しますが、15,000件となると5分以上かかってしまいました。
5,000件ずつ別ファイルに分割するなど、調整が必要なところでしょうか。
なるほどですね。