タイトルを見てピンと来ない人も多いと思いますが、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の指定を なし にしたい、なんてことは、たぶんないとは思うんですけどね。
ちょっぴり ネタ気味の話題でした。