このエントリーをはてなブックマークに追加

MySQL SQL

非ITエンジニアの友人から「データ分析の部署に移動するのでSQLを勉強したいんだけど、なにか良い勉強方法ない?」と聞かれたので安定のミック本を勧めたんだが、ローカル環境構築で詰まってしまっていたので、できる限りわかりやすくローカル環境の構築方法を書こうと思う。
 
※ ターミナルってなに?とレベルの初心者向けの記事です

環境

macOS Mojave Version 10.14.5

※ Windowsの方はごめんなさい

目次

  • ターミナルからMySQLをインストールする
    • ターミナルの起動
    • Homebrewのインストール
    • MySQLのインストール
  • MySQLの設定とサンプルデータのインサート
    • MySQLの起動とセキュリティ設定
    • MySQLにサンプルデータをインサート
  • Sequel Proを使って、ローカルDBを見やすくする
    • Sequel Proのインストール
    • Sequel Proの設定
    • Sequel ProからSQLを叩いてみる
  • おまけ

ターミナルからMySQLをインストールする

ターミナルの起動

ターミナル(Terminal)ってなに?って感じだと思うが、コマンド(命令文)を打ち込むとPCを動かせるものぐらいの理解で大丈夫。
さて、このターミナルを使ってMySQLというデータベース管理システムをインストールしていく。
 
ターミナルを起動するには、control + Space を押し、スポットライトを起動して検索欄にターミナル or terminalと打って、Terminal.appを選択する。
 
terminal起動

こんな感じの画面が表示できていればOK
※ 私のものはカスタマイズしているので、普通は真っ白に黒字で表示されるはず

terminal

Homebrewのインストール

Homebrewというパッケージ管理ソフトをインストールする。
これをいれると他のツールだったりソフトウェアのインストールや管理がとても楽になるので入れる。
 
ターミナルで下記コマンドを打ち込む。
※ $はターミナルで実行しているという記号として使っているので打ち込まないこと

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

参考:https://brew.sh/index_ja

途中Xcodeのインストール許可を求められるので、エンターを押してからPCのパスワードを入力する。
インストールが終わると下記のようなメッセージが表示される。

(省略)
- Run `brew help` to get started
(省略)

brew helpと打って、下記のようなhelpが表示されていれば、インストール完了。

Example usage:
  brew search [TEXT|/REGEX/]
  brew info [FORMULA...]
  brew install FORMULA...
  brew update
  brew upgrade [FORMULA...]
  brew uninstall FORMULA...
  brew list [FORMULA...]
(省略)

MySQLのインストール

さきほどインストールしたHomebrewをつかって、MySQLをインストールしていく。

$ brew install mysql@5.7

コマンドを実行するとちょっと時間がかかるので待つ。 下記のような文言が表示されれば、インストール完了

(省略)
To connect run:
    mysql -uroot

To have launched start mysql now and restart at login:
  brew services start mysql
Or, if you don't want/need a background service you can just run:
  mysql.server start

パスを通す

echo 'export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"' >> ~/.bash_profile
source ~/.bash_profile

MySQLの設定とサンプルデータのインサート

MySQLの起動とセキュリティ設定

無事にインストールできたので、MySQLを起動して、設定していく。
下記を打って、

$ mysql.server start

下記が表示されれば、無事にMySQLが起動。

Starting MySQL
 SUCCESS!

 
下記を打って、セキュリティの設定をしていく。

$ mysql_secure_installation

基本的にはyを打ち続けるだけ。
パスワードは好きに設定。

下記が表示されていれば、設定完了。

(省略)

All done!

MySQLにサンプルデータをインサート

ただMySQLを入れただけだと、特にSQLを練習するようなデータが入っていないので入れる。
下記URLにアクセスして、サンプルデータをダウンロード。
※ 映画が好きなので、sakilaという映画データが入ったサンプルデータをダウンロードする

https://dev.mysql.com/doc/index-other.html

MySQLサンプルデータ

Zipを展開すると下記のようなファイルが入った展開される。

sakila-db
├── sakila-data.sql
├── sakila-schema.sql
└── sakila.mwb

MySQLにログインして、データをインサートしていく。

$ mysql -u root -p

パスワードを求められるのでさきほど設定したものをうつ。 下記が表示されればログイン完了。

mysql>

まずはscheme情報をインサートする。
※ ユーザー名はターミナルの$直前に表示されているものに置き換えること

mysql> SOURCE /Users/ユーザー名/Downloads/sakila-db/sakila-schema.sql;

次にデータ。

mysql> SOURCE /Users/ユーザー名/Downloads/sakila-db/sakila-data.sql;

Query OKのような表示が出ていればインサート完了。   実際にSQLが叩けるかを確認する。

まず、databaseを選ぶ。 入れたのがsakilaなので

mysql> USE sakila;

下記が出ていれば、databaseの変更完了。

Database changed

SQLを作成するためにどんなテーブルがあるかを確認する。

mysql> SHOW tables;

下記が表示される。

+----------------------------+
| Tables_in_sakila           |
+----------------------------+
| actor                      |
| actor_info                 |
| address                    |
| category                   |
| city                       |
| country                    |
| customer                   |
| customer_list              |
| film                       |
| film_actor                 |
| film_category              |
| film_list                  |
| film_text                  |
| inventory                  |
| language                   |
| nicer_but_slower_film_list |
| payment                    |
| rental                     |
| sales_by_film_category     |
| sales_by_store             |
| staff                      |
| staff_list                 |
| store                      |
+----------------------------+
23 rows in set (0.01 sec)

試しに、何個の映画が登録されているか確かめる。

mysql> SELECT COUNT(*) FROM film;
+----------+
| count(*) |
+----------+
|     1000 |
+----------+
1 row in set (0.00 sec)

参考:https://dev.mysql.com/doc/sakila/en/sakila-installation.html
 

これでローカル環境で気軽にSQLを実行できる環境の構築完了。
ターミナルでSQL実行するから良いよーという方はここで終了。
 

個人的に最初はテーブルの関係や実データ見るときにターミナルでいちいちコマンド打つのは面倒だと思うので、Sequel Proの設定方法も書く。

Sequel Proを使って、ローカルDBを見やすくする

Sequel Proのインストール

下記からダウンロードしてインストール。
https://www.sequelpro.com/

Sequel Proの設定

まず、Sequel Pro用のユーザーを作成する。
MySQLのPasswordの形式が変更された関係でそのままだと接続できないため。  
下記コマンドで作成後、

mysql> CREATE USER 'pancake'@'localhost' IDENTIFIED WITH mysql_native_password BY 'パスワード';

下記コマンドでユーザーが作成されていることを確認。

mysql> SELECT host, user, plugin FROM mysql.user;
+-----------+------------------+-----------------------+
| host      | user             | plugin                |
+-----------+------------------+-----------------------+
| localhost | mysql.infoschema | caching_sha2_password |
| localhost | mysql.session    | caching_sha2_password |
| localhost | mysql.sys        | caching_sha2_password |
| localhost | pancake          | mysql_native_password |
| localhost | root             | caching_sha2_password |
+-----------+------------------+-----------------------+
5 rows in set (0.00 sec)

pancakeにsakilaへのアクセス権限を与える。

GRANT ALL PRIVILEGES ON sakila.* to 'pancake'@'localhost';

設定を反映する。

mysql> FLUSH PRIVILEGES;

 

pancakeというユーザーができたので、Sequel Proの接続設定をしていく。
Sequel Proを開くと、下記画面が表示されるので画像のように設定し、Test connectionを 押し、Connection succeededが表示されればOK。
 

Connection succeed

左上のchoose databaseからsakilaを選んで設定完了。
下記のようにテーブルを選んで、データが表示されれば成功。
 

choose sakira

Sequel ProからSQLを叩いてみる

上メニューのQueryを選ぶと下記のような画面が表示される。
 

Query

 
ここでSQLを書くと結果が下記のように出てくる。
 
Query Result

クエリーを保存できたり、ターミナルと違い再編集も楽なのでぜひ使ってみてください。

おまけ

初心者におすすめのSQL本コーナー。

SQL ゼロからはじめるデータベース操作

WindowsかつPostgreSQLなのが今回の環境と違って、ちょっと大変かもしれないが、SQL自体を勉強する上での最初の一冊としてはわかりやすくとてもおすすめ。
今回構築環境で書籍に載っている文法を試してみるとよいかも。

達人に学ぶSQL徹底指南書

こちらは一冊目よりも少し高度になっているが、高速なSQLや読みやすいSQLをどう書くかに主眼があてられていて、良い。
一冊目をやって、もっとやってみたいと思ったら買ってみても損はない。

 

こういう環境構築自体がそもそも複雑なのとはまると本末転倒になりがちなので、ProgateのSQL講座でも良かったんじゃないかと後から反省。
このブログを書いている最中にもSequel ProがMySQL 8.0だと動かないことが判明し、MySQLをダウングレードするのにはまってしまったし・・・。
Docker使った環境の方がもっと楽かもしれないが、なにがなんだか分からなくなってしまいそうな気がしている。どっかのタイミングでDockerバージョンも書きたい。

このエントリーをはてなブックマークに追加

© 2018, Udayan28