MySQL 10 min read

MySQLでデータベース一覧を表示する ― SHOW DATABASESとinformation_schema、USEで切り替え

※この記事にはアフィリエイト広告(プロモーション)が含まれます。

MySQL のデータベース一覧は SHOW DATABASES で出ます。MySQL ではデータベースとスキーマは同じもので、SHOW SCHEMAS と書いても結果は変わりません。この記事の出力は MySQL 8.4.11(Ubuntu 26.04 の標準パッケージ)で採りました。

まず見る(結論)

  • 一覧: SHOW DATABASES;。名前で絞るなら SHOW DATABASES LIKE 'fsv%';
  • 文字コードも見るなら information_schema.SCHEMATA
  • 切り替え: USE データベース名;。今どこにいるかは SELECT DATABASE();
  • 一覧に出るのは、そのユーザーが権限を持つデータベースだけ

一覧を出す

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| Fsv3               |
| fsv                |
| fsv2               |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

information_schema・mysql・performance_schema・sys の4つは MySQL が使うデータベースで、インストール直後から入っています。自分で作ったものだけを見たいときは WHERE で外します。

SHOW DATABASES WHERE `Database` NOT IN ('mysql','sys','information_schema','performance_schema');

LIKE では大文字と小文字が区別されました。LIKE 'fsv%' では Fsv3 が出ず、LIKE 'Fsv%' で出ます。Linux の MySQL は既定(lower_case_table_names=0)でデータベース名の大文字小文字を区別するので、Fsv3 と fsv3 は別の名前です。

シェルから出す

$ mysql -N -e "SHOW DATABASES"
Fsv3
fsv
fsv2
information_schema
...

mysqlshow コマンドでも同じ一覧が表の形で出ます。

-N を付けると見出し行(Database)が出ないので、スクリプトで1行ずつ処理するときに使います。ログインの指定は mysql -u root -p の記事を見てください。

文字コード・表の数・サイズも出す

mysql> SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME
    ->   FROM information_schema.SCHEMATA ORDER BY SCHEMA_NAME;
+--------------------+----------------------------+------------------------+
| SCHEMA_NAME        | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME |
+--------------------+----------------------------+------------------------+
| Fsv3               | utf8mb4                    | utf8mb4_0900_ai_ci     |
| fsv                | utf8mb4                    | utf8mb4_0900_ai_ci     |
| fsv2               | utf8mb4                    | utf8mb4_ja_0900_as_cs  |
| information_schema | utf8mb3                    | utf8mb3_general_ci     |
...

文字コードを指定せずに作ったデータベースは、サーバーの既定(utf8mb4 / utf8mb4_0900_ai_ci)になります。1つのデータベースの作成文は SHOW CREATE DATABASE fsv; で出ます。

表の数とサイズは information_schema.TABLES を集計して出します。

SELECT TABLE_SCHEMA, COUNT(*) AS tables,
       ROUND(SUM(DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS size_mb
  FROM information_schema.TABLES
 GROUP BY TABLE_SCHEMA ORDER BY size_mb DESC;

表が1つも無いデータベースは TABLES に行が無いので、この集計には出てきません。表の無いデータベースも出したいなら、SCHEMATA に LEFT JOIN します。

mysql> SELECT s.SCHEMA_NAME, COUNT(t.TABLE_NAME) AS tables
    ->   FROM information_schema.SCHEMATA s
    ->   LEFT JOIN information_schema.TABLES t ON t.TABLE_SCHEMA = s.SCHEMA_NAME
    ->  WHERE s.SCHEMA_NAME LIKE 'fsv%' GROUP BY s.SCHEMA_NAME;
+-------------+--------+
| SCHEMA_NAME | tables |
+-------------+--------+
| fsv         |      1 |
| fsv2        |      0 |
+-------------+--------+

DATA_LENGTH と INDEX_LENGTH は統計から出る概算で、表を作った直後や大量に更新した後は実際とずれます。中の表の一覧は テーブル一覧の記事にまとめています。

データベースを切り替える

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

ログイン直後は NULL で、どのデータベースも選ばれていません。この状態で表名だけを書くと ERROR 1046 (3D000): No database selected になります。mysql -u ユーザー -p fsv のように最後にデータベース名を付けると、選んだ状態でログインできます。

エラー 原因
ERROR 1049 (42000): Unknown database 'nosuchdb' その名前のデータベースが無い。大文字小文字の違い(fsv3 と Fsv3)でも出る
ERROR 1044 (42000): Access denied for user 'app1'@'localhost' to database 'fsv' データベースはあるが、そのユーザーに権限が無い
ERROR 1007 (HY000): Can't create database 'fsv'; database exists 同じ名前で CREATE DATABASE した。IF NOT EXISTS を付ければエラーにならない

権限で一覧が変わる

権限を何も付けていないユーザーで SHOW DATABASES を実行すると、出るのは information_schema と performance_schema の2つだけでした。GRANT ALL PRIVILEGES ON fsv.* を付けると fsv が加わります。「データベースが一覧に無い」ときは、名前の誤りより先に、ログインしているユーザーと権限を確かめます。

SELECT CURRENT_USER();
SHOW GRANTS;

権限の付け方は ユーザー作成と GRANT の記事にまとめています。

関連: MySQLでテーブル一覧を表示する / MySQLでテーブル定義を確認する / PostgreSQLでデータベース一覧を表示する

MySQL をもっと深く知るための本

MySQL徹底入門 第5版 MySQL 8.4 LTS対応

翔泳社・2025年6月・MySQL 8.4 LTS 対応

MySQL 8.4 に対応した入門書。日本MySQLユーザ会のメンバーが執筆している。

Amazonで見る

MySQL運用・管理[実践]入門 〜安全かつ高速にデータを扱う内部構造・動作原理を学ぶ

技術評論社・2024年5月

内部構造と動作原理から、運用・管理の考え方を学ぶ。

Amazonで見る

Amazonのアソシエイトとして、FIRE SE は適格販売により収入を得ています。