少し前になりますが、MySQL 8.0が公開されました。
MySQL :: MySQL 8.0 Release Notes
新しい構文等が用意されているそうです。
CTEが増えたのは、個人的にはとても嬉しいです。アプリから使う機会があるか、と言われたら困るところですが…CTEを生成する部分を共通化するとか、そういう手段で何とかなったらいいですね。
それとは別に。
Visual Studio CodeでMySQL扱えないかなーと探していたところ、拡張機能がありました。
今回はその紹介です。
前提条件
MySQLのインストールは行われている、という前提にします。
もしくは、自分のPCから接続できるMySQLサーバーがある、という状況を想定します。
コマンドラインや、MySQL Workbench等で、MySQLが開けるなら問題ありません。
バージョン等
| ツール | バージョン |
|---|---|
| OS(Windows) | Windows10 Pro 1803 64bit |
| Visual Studio Code | 1.24.1 |
| MySQL | 8.0.11 |
| MySQL(Visual Studio Code拡張機能) | 0.3.0 |
拡張機能のインストール

上の画像で選択されている拡張機能をインストールします。
MySQLへ接続
拡張機能をインストールし、有効化すると、

のように、エクスプローラーの部分に「MySQL」という領域が追加されます。
この右にある「+」をクリックすると、画面上部のコマンドパレットに、接続情報を以下の順番で入力するよう要求されます。
ローカルの場合、ホスト名はlocalhostでよいです。その他はそれぞれ必要なものを入力します。
エラーが出る(8.0.11の場合)
上記の通り入力すると、コネクションが追加されるのですが、以下の通りエラーが出ます。

Error:ER_NOT_SUPPORTER_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
と表示されています。表示上切れますが。
当件、GitHubにてissueで上がっており、そこに回避策も書いてあります。
思いっきり引用しますが、
ALTER USER 'username'@'host' IDENTIFIED WITH 'mysql_native_password' BY 'password'; you can check it: USE mysql; SELECT plugin FROM user WHERE User = 'username'; by the way, you may need root permissions
とのことです。意訳すると、
まずroot権限でログイン。
以下のクエリを実行。
ALTER USER 'username'@'host' IDENTIFIED WITH 'mysql_native_password' BY 'password';
終わったら、
USE mysql; SELECT plugin FROM user WHERE User = 'username';
でチェックしてね!
とのことです。
結果は、

のようになります。
この状態になったら、Visual Studio Code側でDBをリフレッシュすると、

のように、データベースが見える状態になります*1。
クエリ発行とか
エクスプローラーに表示されているテーブル上で右クリックすると、Select Top 1000と表示され、上位1000行が選択できます。
mysql.dbをSELECTすると、

のように、グリッド形式できちんと表示されます*2。
また、任意のクエリを実行できます。
事前に、コマンドパレットから言語モードをSQLにし、エディタで右クリックすると、Run MySQL Queryと表示されます。

Ctrl + Alt + Eでもよいです。これを選択すると、そのエディタのクエリが実行できます。
つまり、実質なんでもできます。
権限等は適切にチェックされます。SELECT権限しか持たないユーザーでINSERTを実行すると、

のように、ちゃんと拒否されます。
おわりに
以前の記事で、SQL ServerをVSCodeから触る、というのも投稿しました。
MySQLも、Visual Studio Codeからアクセスできます。あちらと違って、出力系は弱いですが。
MySQLは無料ですし、使いやすいので、エディタから気軽にアクセスできると、何かと便利だと思います。
ぜひ使ってみて、もっと快適な開発ライフを送ってください。
余談
MySQL 8.0から、権限周りも変更があったようです。
GRANT ALLで全権限与える、みたいなことができるという記事を見かけ、試しましたが、8.0.11ではできませんでした。
また、権限付与とユーザー作成を同時に行うこともできませんでした。
ユーザー作成後、GRANTで必要な権限を明示的に与える必要があるようでした。
これに関しては、詳細な記事の希望があれば、調べて書きます。
ではでは。