MySQL Workbenchの使い方を画像付きで解説する

#この記事について
MySQLをGUIでわかりやすく操作するツールがMySQL Workbenchです。
ですがこのツールは日本語化されておらず、ツールバーやボタンの説明が全て英語なので、使い慣れていないとなかなか直感的に操作することが難しいかな……という印象です。
この記事では、クエリを実行する・explainを実行するといった超基本的な操作について、Workbench上でどう行えばいいか、スクリーンショットを用いて解説します。

##使用する環境・バージョン
- OS : MacOS Mojave ver 10.14.5
- MySQL : Ver 8.0.18 for osx10.14 on x86_64 (Homebrew)
- MySQL Workbench : Version 8.0.18

##前提条件
- MySQLとWorkbenchのインストールは完了済み
- localhostのDBにrootユーザーで接続できる状態にすでになっているとする

##読者に要求する前提知識
- ターミナルで問題なくコマンド実行ができること
- 基本的なクエリが書けること
- 基本的なDB用語の意味がわかること

#主要操作
## DB接続
### 1.MySQL Workbenchを起動
MySQL Workbenchを初めて起動すると、以下のような画面になります。
<img width="1024" alt="start1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520877/c17c5791-ce50-f31d-f48d-0c95199db3b7.png">
MySQL Connectionsという文字の右側にある+ボタンを押して、接続するDBを選びます。

### DBの登録
+ボタンを押したらこのような画面になります。
<img width="797" alt="start2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520877/241c53b5-2172-fec3-6e50-9208ba143f11.png">
今回はlocalhostDBにrootユーザーで接続することにするので、フォームに以下のように入力します。

- HostName : localhostのIP(デフォルトでフォームに入力されているはず)
- Port : MySQLのデフォルトポートである3306番(デフォルトでフォームに入力されているはず)
- UserName : root(デフォルトでフォームに入力されているはず)
- Connection Name : 識別しやすい適当な名前でいいです。上図ではlocalhost

これで右下のOKボタンを押すと、以下の画面に遷移します。
<img width="1022" alt="start3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520877/484cdbb0-5c94-5a90-e049-3b2f8ca114bb.png">
MySQL Connectionsの下に、先ほどlocalhostと名前をつけたコネクションが表示されています。

### 3.MySQLサーバーの起動
DBに接続する前に、DBサーバーを起動しなければなりません。
ターミナルを開いて、以下のコマンドを打ちます。

```bash
$ mysql.server start
Starting MySQL
. SUCCESS! 
```

### 4.DBへ接続
サーバーが起動できたら、MySQL Connectionsの下にあるlocalhostをクリックします。
<img width="1022" alt="start3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520877/36723d99-00f0-a68a-a7ea-196315ef9898.png">
すると、rootユーザーでDBに入るためのパスワードが要求されるので、もともと設定してあるPWを入力、OKボタンをクリックします。
<img width="409" alt="start4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520877/91ca390c-f30d-8362-7a06-fc570db4c0b4.png">
以下の操作画面になれば接続は成功です。
<img width="1024" alt="start5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520877/de6bfe61-e5db-779f-3d55-3984bef25a2e.png">

##外部ファイル読み込み
MySQLの公式ページからダウンロードしたテストデータをlocalhostのDBに入れます。
メニューバーのServerからData Importを選択します。
<img width="1022" alt="import1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520877/276bf35e-9bc4-ab1c-8807-ff8b1910acbd.png">
開いたタブのImport Optionsで、Import from Self-Contained Fileを選択し、その隣のテキストフォームに公式ページから落としたテストデータのsqlファイルのパスを指定します。
<img width="1022" alt="import2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520877/69359472-4f81-935f-752d-4b953446c38c.png">
また、Default Schema to be Imported Toのタブで、データを入れるスキーマを指定します。
Default Target Schemaの右にあるNewボタンを押して、新しくworldスキーマを作成・指定します。
<img width="393" alt="スクリーンショット 2020-01-24 21.44.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520877/2a0b06c5-3d90-5ad8-fe16-9d274ecda16e.png">
Import Progressのタブを開いて、右下のStart Importボタンを押すと、worldスキーマに3つのデータ入りテーブルが作成されます。
<img width="1022" alt="import3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520877/f8ec04a1-902a-588d-6672-17b3702587e6.png">

##デフォルトスキーマの変更
上で作成したworldスキーマ上でクエリを実行するためには、worldスキーマをデフォルトスキーマに指定する必要があります。
指定するためには、左のnavigatorタブにあるworldスキーマを右クリックして、Set as Default Schemaを選択します。
<img width="1022" alt="スクリーンショット 2020-01-24 21.52.41.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520877/584ca8df-3d95-0d19-340f-4954212861b6.png">
ちなみに、現在のデフォルトスキーマは太文字で表示されています。
<img width="220" alt="スクリーンショット 2020-02-01 16.36.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520877/8af09242-4fb8-cea9-fa13-2b1501af37b2.png">

##外部ファイルの表示
外部のsqlファイルの中身を表示したいときには、一番左のファイルアイコンを押します。
<img width="1023" alt="スクリーンショット 2020-01-25 15.04.04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520877/0e0ee044-2ac9-bcac-7796-808749f7cd7a.png">
すると、ファイル選択画面が表示されるので、見たいファイルを選択して右下Openボタンを押します。
<img width="1022" alt="スクリーンショット 2020-01-25 15.07.52.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520877/0ec5d3d5-2fbf-cf7c-c442-1d49628a90ee.png">
無事に選択したworld.sqlの中身が表示されます。

また、上タブの左から二番目(フォルダ+ボタン)を押しても同様の手順で外部ファイルを表示させることができます。
<img width="1023" alt="スクリーンショット 2020-01-25 15.40.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520877/9b60515c-5b89-c067-89fc-e50e11203057.png">


##ファイル内検索/文字列置換
ファイル内検索/文字列置換を行うためには、右側の虫眼鏡アイコンを押します。
<img width="1022" alt="1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520877/a1fdcb41-34e7-52ff-4a7a-1a4efae466f0.png">

###検索
ファイル内検索を行うためには、左のFindタブを選択し、検索窓に探したい文字列を入力します。
<img width="1021" alt="2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520877/4f391a67-a5b5-bd7a-525e-8b987d3c4ecc.png">

すると、ヒットした箇所がカーソル選択されます。複数箇所見つかっているときは、検索窓の左にある矢印ボタンで移動することができます。
(Doneボタンを押すと検索窓が閉じてしまうので注意)

###文字列置換
ファイル内検索を行うためには、左のReplaceタブを選択し、検索窓上に置換したい文字列、検索窓下に置換後の文字列を入力します。
<img width="1022" alt="スクリーンショット 2020-01-25 15.17.04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520877/91d446c7-2edb-4985-2f3a-e7e81fcc8aee.png">

##新規ファイル作成
一番左のファイル+アイコンを押すことで、新しいタブ(ここではSQL File 3)が開きそこでファイルの中身を編集することができます。
<img width="1023" alt="スクリーンショット 2020-01-25 15.44.35.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520877/f79e69dd-bd9b-4657-2476-452e52b7db74.png">

##ファイルの保存
ファイルを保存したいときは、フロッピーディスクのアイコンを押すことで保存動作に入れます。
<img width="1024" alt="スクリーンショット 2020-01-25 15.55.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520877/7be1082d-5229-9eac-8db8-aaf48f7068a5.png">

##新規スキーマの作成
DBの絵に+が載っているアイコンをクリックすることで、新しいスキーマを作成する画面を出すことができます。
<img width="1023" alt="1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520877/e1572aa4-2f52-5f31-8edb-58ac1b3b36fb.png">
applyを押すと、これから実行する動作がSQL文ベースで表示されます。所望の動作ならば、下のApplyを押すことでそれが実行されます。
<img width="897" alt="2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520877/00f771f0-56f5-6cbd-7564-3566a1743fbc.png">


##クエリの実行
### 通常のクエリ実行
書いたクエリ文を実行するためには、赤丸の中の稲妻アイコンを押します。
<img width="1020" alt="1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520877/884db51b-da13-a313-378f-2110173c1470.png">
すると、書いてある通りcityテーブルの全てのデータが画面下部に表示されます。
<img width="1020" alt="2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520877/c481627d-5ed8-e5b8-0372-e1a739c393ac.png">

### クエリの一部を実行
クエリ文の中で一部を実行したいという場合があることがあります。
例えば、下の例だと、カーソルで選択してあるcountryテーブルの全取得だけを実行したいという場合です。
その場合、真ん中の稲妻+カーソルアイコンを押します。
<img width="1021" alt="3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520877/20bb9530-4adf-10b1-dd9d-78e9481f8c45.png">
すると、他のselect文が無視されて、カーソル指定した分だけが実行・結果が表示されます。
<img width="1020" alt="4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520877/61f9a100-f97c-c230-0b0c-3d901c6883d6.png">

##explainの実行
###visual explain
explainを使い、クエリがどのように実行・検索されているのかを調べます。
調べたいクエリ文をexplainを使わずにそのまま書き、一番右側の稲妻+虫眼鏡アイコンを押します。
<img width="1019" alt="5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520877/8dbcdb63-bb54-307b-1c72-a53017c57196.png">
すると、クエリの実行中にテーブルにどのようにアクセスされているのかが図示されます。
今回の場合、テーブル中の全データを取得するためにfull scanが行われていることがわかります。

###tabular explain
ターミナルでexplainを実行したときのような表が欲しい場合は、プルダウンメニューをVisual ExplainからTabular Explainに変更すればいつものあの表が見られます。
<img width="1025" alt="スクリーンショット 2020-01-25 19.43.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520877/fde24a3a-9f79-60e5-7c6b-b94a1957d0d9.png">

##Viewの確認
Viewというのは、定義した構文をもとに実体のない仮テーブルを作成する機能です。つまり、あらかじめ書いておいたselect文をテーブルのように残しておくことができます。

###定義の確認
あるviewがどのようなselect文で定義されていたのかを確認するためには、view名の右側にあるレンチボタンを押します。
<img width="1022" alt="1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520877/b59441b7-6179-7331-f0cc-21962b44954e.png">
すると、タブの中にview定義文が表示されます。

###中身の確認
viewテーブルが実際どんなデータが入っているのか表形式で確認したいときは、一番右側の稲妻ボタンを押します。
<img width="1022" alt="2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520877/9c38d36c-8d92-a389-f88b-30dc51afc4b5.png">
すると、viewデータの全取得のクエリ文が表示・実行されます。


#ちょっと便利な機能
##特殊文字の可視化
空白・改行・タブなどの特殊文字を、右から二番目のボタンを押すことで可視化させることができます。
<img width="613" alt="スクリーンショット 2020-01-25 15.26.50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520877/7a28003e-87cd-0334-9e59-1378e13b8ecf.png">

##窓端での折り返し
ファイル表示窓からはみ出る文をちょうどよく折り返して表示させるには、一番右側のボタンを押します。
<img width="612" alt="スクリーンショット 2020-01-25 15.34.16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520877/77ed22c7-3e15-2f83-e90d-f3931c828c5c.png">

##綺麗なコードに変換
右上のほうきボタンを押すことで、クエリ文をある程度整ったフォーマットに直してくれます。
<img width="613" alt="1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520877/afc1f91a-e047-d7c6-23bc-7cd41ca921c8.png">
例えば、上のコードに対して使ってみます。
<img width="615" alt="スクリーンショット 2020-01-25 15.50.18.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520877/ecb3ab4b-8fb8-deb4-e948-c3945e2906c1.png">
すると、改行や小文字→大文字などの変換を勝手にしてくれます。