【MySQL】ターミナルからSQLファイルを実行する方法

MySQL

今回は、ターミナルからSQLファイルを実行する方法について説明します。

データ準備

ターミナルから実行するSQLファイルを準備します。SQLファイルで実行する内容としては、データベース作成、テーブル作成、データ追加、データの取得までをいっきに行います。

-- データベースの作成
CREATE DATABASE IF NOT EXISTS library;
USE library;

-- テーブル作成
CREATE TABLE IF NOT EXISTS manga (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(100) NOT NULL,
    author VARCHAR(100),
    genre VARCHAR(50),
    published_year INT,
    volumes INT
);

-- データ追加
INSERT INTO manga (title, author, genre, published_year, volumes) VALUES
('ワンピース', '尾田栄一郎', '冒険', 1997, 100),
('ナルト', '岸本斉史', 'アクション', 1999, 72),
('ブリーチ', '久保帯人', 'アクション', 2001, 74),
('進撃の巨人', '諫山創', 'ダークファンタジー', 2009, 34),
('ドラゴンボール', '鳥山明', '冒険', 1984, 42),
('僕のヒーローアカデミア', '堀越耕平', 'アクション', 2014, 36),
('鬼滅の刃', '吾峠呼世晴', 'アクション', 2016, 23),
('デスノート', '大場つぐみ, 小畑健', 'サスペンス', 2003, 12),
('東京喰種トーキョーグール', '石田スイ', 'ホラー', 2011, 14),
('鋼の錬金術師', '荒川弘', '冒険', 2001, 27),
('ハンターハンター', '冨樫義博', '冒険', 1998, 36),
('フェアリーテイル', '真島ヒロ', '冒険', 2006, 63),
('ジョジョの奇妙な冒険', '荒木飛呂彦', '冒険', 1987, 131),
('SLAM DUNK', '井上雄彦', 'スポーツ', 1990, 31),
('ブラッククローバー', '田畠裕基', '冒険', 2015, 32),
('チェンソーマン', '藤本タツキ', 'ダークファンタジー', 2018, 15),
('ベルセルク', '三浦建太郎', 'ダークファンタジー', 1989, 41),
('ワンパンマン', 'ONE, 村田雄介', 'アクション', 2012, 26),
('呪術廻戦', '芥見下々', 'アクション', 2018, 23),
('青の祓魔師', '加藤和恵', 'スーパーナチュラル', 2009, 27),
('AKIRA', '大友克洋', 'サイバーパンク', 1982, 6),
('よつばと!', 'あずまきよひこ', '日常', 2003, 15),
('君に届け', '椎名軽穂', '恋愛', 2005, 30),
('NANA', '矢沢あい', '恋愛', 2000, 21),
('バガボンド', '井上雄彦', '歴史', 1998, 37),
('銀魂', '空知英秋', 'コメディ', 2003, 77),
('暗殺教室', '松井優征', 'アクション', 2012, 21),
('モブサイコ100', 'ONE', 'スーパーナチュラル', 2012, 16),
('ハイキュー!!', '古舘春一', 'スポーツ', 2012, 45),
('聖闘士星矢', '車田正美', '神話', 1986, 28),
('べるぜバブ', '田村隆平', 'アクション', 2009, 28),
('黒子のバスケ', '藤巻忠俊', 'スポーツ', 2008, 30),
('ノラガミ', 'あだちとか', 'スーパーナチュラル', 2010, 24),
('マギ', '大高忍', '冒険', 2009, 37),
('犬夜叉', '高橋留美子', '冒険', 1996, 56),
('幽☆遊☆白書', '冨樫義博', 'アクション', 1990, 19),
('トリコ', '島袋光年', '冒険', 2008, 43),
('ソウルイーター', '大久保篤', 'スーパーナチュラル', 2004, 25),
('新世紀エヴァンゲリオン', '貞本義行', 'メカ', 1994, 14),
('クレイモア', '八木教広', 'ダークファンタジー', 2001, 27),
('七つの大罪', '鈴木央', '冒険', 2012, 41),
('Dr.STONE', '稲垣理一郎, Boichi', '冒険', 2017, 26),
('遊☆戯☆王', '高橋和希', '冒険', 1996, 38),
('フェアリーゴーン', '藤崎竜', 'アクション', 2019, 11),
('キングダム', '原泰久', '歴史', 2006, 68),
('ヴィンランド・サガ', '幸村誠', '歴史', 2005, 26),
('黒執事', '枢やな', 'スーパーナチュラル', 2006, 31),
('ドロヘドロ', '林田球', 'ダークファンタジー', 2000, 23),
('炎炎ノ消防隊', '大久保篤', 'アクション', 2015, 34);

-- 追加したデータの確認
SELECT * FROM manga;

今回、ファイル名は manga.sql にしてみました。

manga.sql

SQLファイルの実行方法

まずは、ターミナルから mysql を起動します。

% mysql --version
mysql Ver 14.14 Distrib 5.7.37, for osx10.17 (x86_64) using  EditLine wrapper
% brew services start mysql@5.7
==> Successfully started `mysql@5.7` (label: homebrew.mxcl.mysql@5.7)
% mysql -u root -p  -- ルートユーザーでログイン
Enter password: -- パスワードを入力

ログイン後、現在使えるデータベースを確認してみましょう!

mysql> show databases;
+-------------------------+
| Database                |
+-------------------------+
| information_schema      |
| LibraryManagementSystem |
| list_app                |
| mysql                   |
| performance_schema      |
| sys                     |
+-------------------------+
6 rows in set (0.00 sec)

では事前に作ったsqlファイルを実行したいと思います。SQLファイルを実行するコマンドは下記です。

mysql>source ファイル名(ファイルパス);

ファイルはドラック&ドロップすることで、ファイルパスまで自動で入力してくれます。

実際にファイルを実行すると、データベースの作成からテーブル作成、データ追加、データ取得までをいっきに行ってくれました。ファイル実行後、データベースが作成されているか再度確認してみました。

mysql> show databases;
+-------------------------+
| Database                |
+-------------------------+
| information_schema      |
| LibraryManagementSystem |
| library                 |
| list_app                |
| mysql                   |
| performance_schema      |
| sys                     |
+-------------------------+
7 rows in set (0.01 sec)
作成したテーブルで SELECT文を実行

まとめ

SQLをいっきに実行した場合は、sqlファイルを作って source ファイル名(ファイルパス); で実行してみましょう!

コメント

  1. 桜井陽子 より:

    記事の内容がとても分かりやすく、初心者にも優しいですね。この方法を使って、自分でもターミナルからSQLファイルを実行する自信がつきました。ところで、関連するSQLコマンドのエラーが出た場合の対処法についても教えていただけませんか?情報には常に鮮度が求められるので、また新たな知識があれば教えてください。ありがとうございました。

    • toshi より:

      コメントありがとうございます!
      エラーが出た場合ということですが、エラーの内容によって解決策が違うのでちょっと難しいです。。また記事を投稿する予定なのでよかったら参考にしてみてください。