【MySQL】 外部ファイルからSQL文を一括で実行するには...

構文

* 注意: -pの直後に続けてパスワードを指定する
mysql -u <ユーザ名> -p<パスワード> -h <ホスト名> <データベース名> < <SQLファイル>

サンプル

 * バッチファイルとして作成してみる

事前準備

 * 環境変数 Path に対して、パスを通しておく
  (デフォルトだったら「C:\Program Files\MySQL\MySQL Server X.X\bin」(X.X:Version)を指定)

sample_sql.bat

REM Use UTF-8
chcp 65001

REM mysql -u <UserName> -p<password> -h <host> <db name> < <SQL file>
mysql -u root -ppassword -h localhost sampledb < create_delete.sql
mysql -u root -ppassword -h localhost sampledb < input.sql

REM Use Shift_JIS
chcp 932

create_delete.sql

-- Dumping structure for テーブル sampledb.employee
CREATE TABLE IF NOT EXISTS `employee` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  `birth_date` date NOT NULL,
  `section_id` bigint(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='従業員';

DELETE FROM employee;

ALTER TABLE employee AUTO_INCREMENT = 1;

input.sql

INSERT INTO `employee` (`name`, `birth_date`, `section_id`) VALUES ('Mike', '1982-11-22', 1);
INSERT INTO `employee` (`name`, `birth_date`, `section_id`) VALUES ('Tom', '1973-01-02', 2);
INSERT INTO `employee` (`name`, `birth_date`, `section_id`) VALUES ('Smith', '1939-04-15', 3);
INSERT INTO `employee` (`name`, `birth_date`, `section_id`) VALUES ('Chris', '1949-12-31', 3);
INSERT INTO `employee` (`name`, `birth_date`, `section_id`) VALUES ('John', '1976-09-19', 4);
INSERT INTO `employee` (`name`, `birth_date`, `section_id`) VALUES ('Alan', '1899-12-22', 1);
INSERT INTO `employee` (`name`, `birth_date`, `section_id`) VALUES ('Cindy', '1961-08-01', 2);
INSERT INTO `employee` (`name`, `birth_date`, `section_id`) VALUES ('Ken', '1945-10-21', 3);
INSERT INTO `employee` (`name`, `birth_date`, `section_id`) VALUES ('Cassie', '1933-11-11', 3);
INSERT INTO `employee` (`name`, `birth_date`, `section_id`) VALUES ('Brian', '1976-09-19', 4);

トラブルシューティング

日本語を使うと文字化けする

 * バッチで、以下のように、日本語を使うと文字化けする。

【例】
INSERT INTO `employee` (`name`, `birth_date`, `section_id`) VALUES ('あい', '1976-09-19', 4);

【原因】
 * コマンドプロンプトのデフォルトの文字コードが「Shift-JIS」に対して、
   SQLファイルの文字コードが「UTF-8」だった場合に文字化けを起こす

【解決策】
 * コマンドプロンプト文字コードUTF-8にするために「chcp 65001」を実行する


関連記事

PostgreSQL】ファイルからSQL文を一括で実行するには ~pdqlコマンドの利用~

http://blogs.yahoo.co.jp/dk521123/33982442.html

Java から、 DB作成 / 権限付与 / 外部SQLファイル文実行 を行う

http://blogs.yahoo.co.jp/dk521123/36547646.html