MySQLでデフォルトデータベースをナシにする方法

タイトルを見てピンと来ない人も多いと思いますが、MySQLで、「use DB名」してデフォルトデータベースを一度指定すると、もう、何も指定していない状態には戻れないようですというお話です(ようです、というのは、私が方法を知らないだけかもしれないということ)。

MySQLに、デフォルトデータベース(以下デフォルトDB)を指定せずに接続した直後は、

mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| NULL       |
+------------+

 となっています。デフォルトDBを指定していないのだから当然ですよね。
デフォルトDBを指定(以下の例では test データベース)すると、DATABASE()の結果でも変更を確認することができます。

mysql> use test
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| test       |
+------------+

 さて、一度指定したこの デフォルトDB。なかったことにする(イメージとしては「スキーマの外に出る」という感じ)ことはできないのでしょうか。

unuse
とか
use null
とかのようなことができればよいのですが、残念ながらそういうコマンドはなさそうです(ご存知の方がいたら教えてください!)。


ということで、編み出した裏技(というほどでもない)。

以下のようにすると、デフォルトDBが なし になります。

CREATE DATABASE z;
use z;
DROP DATABASE z; 

 適当な名前の(既存ではない)データベースを作成し、それをデフォルトDBとしてから、そのデータベースをDROPする、ということをやっています。以下のように1行にまとめて実行することもできます。

mysql> CREATE DATABASE z; use z; DROP DATABASE z;
Query OK, 1 row affected (0.01 sec)
Database changed
Query OK, 0 rows affected (0.01 sec)
mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| NULL       |
+------------+


 なお、この方法は「やってみたらできた」ということを書いたものですので、本手順による悪影響等についての検証はしていません。大切な環境、大切な場面でお使いになる場合は、ご自身で十分に調査、検証をなさってください。


 まぁ、デフォルトDBの指定を なし にしたい、なんてことは、たぶんないとは思うんですけどね。
ちょっぴり ネタ気味の話題でした。