MySQLで特定のデータベース内の空でないテーブル一覧を取得する方法
MySQLで空でないテーブルの一覧を取得する方法
特定のデータベースの中から「1件以上の行を持つテーブル(=空でないテーブル)」だけを抜き出したい場面は意外と多くあります。そんなときは、MySQLが標準で備えているメタデータ用スキーマ information_schema の tables テーブルを照会するのが最も手軽な方法です。
基本となるSQL構文
SELECT table_type, table_name, table_schema FROM information_schema.tables WHERE table_rows >= 1 AND table_schema = 'yourDatabaseName';
table_rows カラムには各テーブルの行数(推定値)が格納されているため、「table_rows >= 1」という条件を付けることで、少なくとも1行以上のデータを持つテーブルだけを絞り込めます。'yourDatabaseName' の部分は、調べたいデータベース名に置き換えてください。
実行例:データベース「test」の場合
ここでは例として、test というデータベースに対してクエリを実行してみます。
mysql> SELECT table_type, table_name, table_schema
-> FROM information_schema.tables
-> WHERE table_rows >= 1 AND table_schema = 'test';
出力結果
次のように、データベース「test」内の空でないテーブルが一覧表示されます。この環境では合計80件のテーブルが該当しました(以下は抜粋)。
+------------+------------------------------+--------------+ | TABLE_TYPE | TABLE_NAME | TABLE_SCHEMA | +------------+------------------------------+--------------+ | BASE TABLE | add30minutesdemo | test | | BASE TABLE | addoneday | test | | BASE TABLE | agecalculatesdemo | test | | BASE TABLE | aliasdemo | test | | BASE TABLE | allcharacterbeforespace | test | | BASE TABLE | allownulldemo | test | | BASE TABLE | autoincrementdemo | test | | BASE TABLE | betweendatedemo | test | | BASE TABLE | bookdatedemo | test | | BASE TABLE | changecolumnpositiondemo | test | | BASE TABLE | concatenatetwocolumnsdemo | test | | BASE TABLE | cumulativesumdemo | test | | BASE TABLE | currentdatetimedemo | test | | BASE TABLE | dateasstringdemo | test | | BASE TABLE | dateformatdemo | test | | BASE TABLE | dateinsertdemo | test | | BASE TABLE | datesofoneweek | test | | BASE TABLE | datetimedemo | test | | BASE TABLE | dayofweekdemo | test | | BASE TABLE | decimaltointdemo | test | ... +------------+------------------------------+--------------+ 80 rows in set (0.00 sec)
この結果では、すべての行が BASE TABLE(通常のテーブル)として返されています。ビューを除外したい場合は、条件に AND table_type = 'BASE TABLE' を追加すると確実です。
知っておくと便利なポイント
- InnoDBでは概算値になる:
TABLE_ROWSの精度はストレージエンジンによって異なり、MyISAMでは正確な値ですが、InnoDBでは統計情報に基づく概算値です。厳密な行数が必要な場合は、対象テーブルに対して個別にCOUNT(*)を実行してください。 - 名前順に整列させる: 結果を読みやすくしたい場合は、クエリの末尾に
ORDER BY table_name;を追加すると、テーブル名の昇順でソートされます。 - SHOW TABLESとの違い:
SHOW TABLESコマンドは全テーブルを単純に列挙するだけで、空かどうかの判定はできません。行数によるフィルタリングが必要な場合は、information_schema の照会が有効です。
まとめ
information_schema.tables に対して table_rows >= 1 とデータベース名の条件を指定して照会すれば、特定のデータベース内にある「空でないテーブル」の一覧を簡単に取得できます。ただし、InnoDB環境では行数が概算値である点だけ留意しておきましょう。
-
MySQLデータベース内のすべてのテーブルを一覧表示する方法
```html ここでは、MySQLデータベース内のすべてのテーブルを一覧表示する方法について解説します。 データベースの選択 データベースを作成した後、そのデータベースにアクセスして使用するには、以下のクエリを実行します。 mysql> USE databaseName Database changed USEステートメントの特徴 USEステートメントはセミコロンを必要としません。これはQUITステートメントと同様の仕様です。ただし、セミコロンを付けても問題はありません。 自分専用のデータベースを作成して使用することも可能ですが、その前にMySQL管理者の権限付与が必要になります。
-
mysqldumpとは?MySQLデータベースの論理バックアップを徹底解説
mysqldumpは、MySQLに標準で付属するクライアントユーティリティで、データベースの論理バックアップを行うためのツールです。実行すると、元のデータベースオブジェクト定義(テーブル構造など)とテーブルデータを再現できる一連のSQL文が出力されます。このSQL文を別のサーバーで実行すれば、元の状態をそのまま復元できます。mysqldumpの主な用途と特徴1つまたは複数のMySQLデータベースをダンプし、バックアップや他のSQLサーバーへの移行に利用できます。出力形式はSQL文のほか、CSVやタブ区切りなどの区切りテキスト、XML形式にも対応しています。mysqldumpを実行するには、ダン