元データはExcelシートに作ってあるんだよね
Laravelのテスト用にテーブルにたくさんデータが必要だな~。INSERT文でレコード作れるらしいけど、1件ずつ作るのめんどうくさいなぁ~
というわけで、考えてみました。
レコードを作成するテーブルの情報
テーブル名は「books」で、カラムは3つあります。
- id
- author_id
- book_title
1 2 3 4 5 6 7 8 |
mysql> describe books; +------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | author_id | int(11) | YES | MUL | NULL | | | book_title | varchar(100) | YES | | NULL | | +------------+--------------+------+-----+---------+----------------+ |
Excelで作成したテストデータがこちら
Excelシートのデータからクエリを作る
元データの左右に空白列を挿入します。目印としてセルを黄色にしています。
VALUES以降のクエリを作成
booksテーブルにレコードを作成するINSERT文です。
INSERT INTO books VALUES('idの値','author_idの値','book_titleの値');
1件目(Excel2行目)の場合、VALUES以降の部分はこうなります
('1','1','白夜行');
この形式にするため、シングルクォートやカンマなどの記号を入力します。
私はこんな感じで入力しています。
①先頭行の値を最終行まで一瞬でコピーする方法
先頭行のセルの右下にカーソルを合わせると、十字のマークが出現します。そのポイントで「ダブルクリック」します。
②シングルクォートは2つ並べる
‘,’と入力すると、最初のシングルクォート以降が消えて,’となってしまうので、”,’と入力しています。
(※Excelでは、1つめのシングルクォート以降が文字列として認識されるため、先頭のシングルクォートは見た目消えてしまう)
A列~G列の文字列を&で結合します。
H列にVALUES以降のクエリができました。
INSERT文と連結させる
I列にINSERT文を入力し、H列と結合します。
INSERT INTO books VALUES の部分を文字列として認識させたいので、前後をダブルクオーテーションで囲っています。
I2セルに下記の数式を入力したら、最終行までコピーします。セルの右下にカーソルを合わせて「ダブルクリック」です!
="INSERT INTO books VALUES"&H2
クエリのできあがり
Excelシート上で作成したクエリを実行する
動画をご覧ください。下記の4つの作業をしています。
use データベース名;のコマンドで、事前にデータベースの切り替えをしておきましょう!
- booksテーブルが空であることを確認
- Excelで作成したI列のクエリを一括コピー
- ターミナルに貼り付け
- booksテーブルにレコードが作成されていることを確認
この手順なら、Excelシートにデータさえ作成しておけば、10行でも100行でも手間は同じです!