そこで複数のSQL文をファイルにまとめて、バッチ処理でデータベースを構築することにします。仕組みは以前にやったデータベースの復元(リストア)と同じです。
学習用の環境を構築するには、私のデータベースのバックアップファイルを、あなたの環境でそのまま復元するのが一番簡単ですが、それではあなたがデータベースを作る時に応用できません。
今回はSQL文をまとめた「バッチ処理用ファイル」と対応する「CSVファイル」を用意してテーブル作成とデータの追加を一気に行なう方法を解説します。
データの追加はINSERT文を使う方法もありますが、大量のデータの場合はCSVファイルのほうがデータを準備しやすいです。
このSQL文とCSVファイルを変えるだけで、あなたのオリジナルデータベースを作るときにも使えます。
***以下の手順は「SampleDB040」データベースが作成済みという条件です。***
【1】SampleDB040.zipをダウンロードします。
【2】ダウンロードした圧縮ファイルを解凍します。
【3】解凍したファイルを以下の場所に配置します。
C:\mysql\data\sampledb040
*「\」はWindowsではエンマークのことです。
ここからはバッチ処理を行なう手順です。
【4】MySQLを開始します。
1.コマンドプロンプトを起動します。
2.「net start mysql」と入力し、「Enterキー」を押します。
*まだ接続はしません。
【5】「root」ユーザーでテーブルの作成とデータの追加を行ないます。
1.以下のように入力し、「Enterキー」を押します。
mysql -u root -p SampleDB040 < "C:\mysql\data\sampledb040\sampledb040.sql"
2.rootのパスワードを求められるので入力し、「Enterキー」を押します。
エラーが出なければテーブルの作成とデータの追加は完了です。
【6】確認のため「pgtop」ユーザーでMySQLに接続します。
1.「mysql -u pgtop -p -b」と入力し、「Enterキー」を押します。
2.パスワードを求められるので「12345」入力し、「Enterキー」を押します。
【7】以下のSQL文を入力し、使用するデータベースを選択します。
USE SampleDB040;
【8】以下のSQL文を入力し、データベース内にあるテーブルを確認します。
SHOW TABLES;
新しいテーブルが8つ作成されていますね。
【9】テーブルの構造を確認します。「sampledb040.sql」の CREATE文と比べてみてください。
DESC T01Prefecture;
DESC T02City;
DESC T03Town;
DESC T04Customer;
DESC T05Sex;
DESC T06Goods;
DESC T07Slip;
DESC T08Details;
【10】テーブルのデータを確認します。
SELECT * FROM T01Prefecture;
SELECT * FROM T02City;
SELECT * FROM T03Town;
SELECT * FROM T04Customer\G
SELECT * FROM T05Sex;
SELECT * FROM T06Goods;
SELECT * FROM T07Slip;
SELECT * FROM T08Details;
*T03Townはレコード数が12万件を超えるので表示に数分かかります。できればWHERE句を付けて表示してください。
例 WHERE TOWN_CD BETWEEN 1 AND 10000;
*T04Customerのようにフィールド数が多い場合は「\G」を付けるとレコードごとに表示されます。
【11】以下の図を参考にMySQLを終了・停止します。
1.「exit」と入力し、「Enterキー」を押します。
2.「net stop mysql」と入力し、「Enterキー」を押します。
【12】コマンドプロンプトは閉じてください。
【13】「C:\mysql\data\sampledb040」に配置した、sampledb040.sql と csvファイルはもう要らないので削除してください。
*MySQLが作成したファイルを削除しないように注意。
【解説】
「sampledb040.sql」のSQL文については、ほとんど同じパターンの繰り返しなので、1つだけ取り上げます。
(1)テーブルが既にある場合は削除します。インポートが失敗した場合に、テーブルが残っていても再度実行できるようにするためです。
DROP TABLE IF EXISTS T01Prefecture;
(2)テーブルを作成しています。各フィールドの容量は大きめに見積もっています。
CREATE TABLE T01Prefecture (
PREF_CD INT,
PREF_NAME VARCHAR(10),
PRIMARY KEY (PREF_CD)
);
*INTはデフォルトで -2147483648 ~ 2147483647 の整数。
(2)テーブルにファイルからデータを取り込んでいます。
LOAD DATA INFILE "T01Prefecture.csv"
INTO TABLE T01Prefecture FIELDS TERMINATED BY ","
LINES TERMINATED BY "\r\n";
「C:\mysql\data\sampledb040」に配置するとファイル名だけの指定で済みます。
このように「バッチ処理用ファイル」と対応する「CSVファイル」を用意すると、簡単にデータを取り込めます。