MySQL

MySQL

【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件ずつ別ファイルに分割するなど、調整が必要なところでしょうか。

なるほどですね。

-MySQL
-, ,