
【MySQL】SQLを外部ファイルから実行する方法
2019/03/01
データベースに登録されているデータが(運用の都合上から)あまりにおかしな具合になっていたので、15,000件ほどを手で修正し、アップデートするというアホな作業を経験してしましました。
その際、テキストファイルにアップデート用SQLを書き、MySQLからそのファイルを指定して実行するということをしたので、その方法を備忘録としてポストしておきます。
1. 外部ファイルにSQLを書く
まずはテキストファイルに実行したい内容のSQLを書きます。
今回は UPDATE 文でしたが、INSERT 文でも DELETE 文でも実行可能だと思います。
日本語を扱う際は必ず、データベースと同じ文字コードで保存すること。
私の場合(多くはそうだと思いますが)は UTF-8 です。
[sql]
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';
[/sql]
「sqlfile.txt」として、任意のパスへ保存。
2. コンソールからmysqlへ接続
コンソール(今回はDOSプロンプト)から、mysql に接続します。
show databases; でデータベース一覧を表示。
[default]
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)
[/default]
use コマンドで、扱うデータベースを指定します。
[default]
mysql> use toogiedevelop;
Database changed
[/default]
これで「toogiedevelop」データベースを取り扱うこととなります。
テーブルの一覧は show tables; で取得可能。
[default]
mysql> show tables;
+-------------------------+
| Tables_in_toogiedevelop |
+-------------------------+
| places |
| trips |
| users |
+-------------------------+
3 rows in set (0.00 sec)
[/default]
3. sourceコマンドでファイルに記述したSQLを実行
[default]
mysql> source C:\path\to\file\sqlfile.txt
Query OK, 10 row affected(0.03 sec)
mysql >
[/default]
以上で完了です。簡単。
10件ぐらいですと1秒かからずに実行完了しますが、15,000件となると5分以上かかってしまいました。
5,000件ずつ別ファイルに分割するなど、調整が必要なところでしょうか。
なるほどですね。