MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで特定のデータベース内の空でないテーブル一覧を取得する方法

MySQLで空でないテーブルの一覧を取得する方法

特定のデータベースの中から「1件以上の行を持つテーブル(=空でないテーブル)」だけを抜き出したい場面は意外と多くあります。そんなときは、MySQLが標準で備えているメタデータ用スキーマ information_schematables テーブルを照会するのが最も手軽な方法です。

基本となる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環境では行数が概算値である点だけ留意しておきましょう。

  1. MySQLデータベース内のすべてのテーブルを一覧表示する方法

    ```html ここでは、MySQLデータベース内のすべてのテーブルを一覧表示する方法について解説します。 データベースの選択 データベースを作成した後、そのデータベースにアクセスして使用するには、以下のクエリを実行します。 mysql> USE databaseName Database changed USEステートメントの特徴 USEステートメントはセミコロンを必要としません。これはQUITステートメントと同様の仕様です。ただし、セミコロンを付けても問題はありません。 自分専用のデータベースを作成して使用することも可能ですが、その前にMySQL管理者の権限付与が必要になります。

  2. mysqldumpとは?MySQLデータベースの論理バックアップを徹底解説

    mysqldumpは、MySQLに標準で付属するクライアントユーティリティで、データベースの論理バックアップを行うためのツールです。実行すると、元のデータベースオブジェクト定義(テーブル構造など)とテーブルデータを再現できる一連のSQL文が出力されます。このSQL文を別のサーバーで実行すれば、元の状態をそのまま復元できます。mysqldumpの主な用途と特徴1つまたは複数のMySQLデータベースをダンプし、バックアップや他のSQLサーバーへの移行に利用できます。出力形式はSQL文のほか、CSVやタブ区切りなどの区切りテキスト、XML形式にも対応しています。mysqldumpを実行するには、ダン