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

MySQLで1つのステートメントを使ってデータベース内の全テーブルの構造を確認する方法

MySQLでは、INFORMATION_SCHEMA.COLUMNS を利用することで、たった1つのSQL文でデータベース内のすべてのテーブルの構造(カラム情報)を一括して確認できます。通常、テーブルごとに DESCRIBE 文を実行する必要がありますが、この方法なら手間を大幅に削減できます。

基本構文

SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='yourDatabaseName'\G

TABLE_SCHEMA に対象のデータベース名を指定します。末尾の \G を付けることで、結果が縦方向に整形されて表示され、多くのカラム情報がある場合でも読みやすくなります。

実行例

ここでは、2つのテーブル(mytableyourtable)を持つ「sample」というデータベースを例に説明します。

実際に上記の構文を実行すると、次のようなクエリになります。

mysql> select * FROM information_schema.columns WHERE table_schema = 'sample'\G

出力結果

以下は、データベース内の2つのテーブルの構造を記述した出力結果です。各カラムのデータ型、文字コード、照合順序、権限などの詳細情報が確認できます。

*************************** 1. row ***************************
TABLE_CATALOG: def
TABLE_SCHEMA: sample
TABLE_NAME: mytable
COLUMN_NAME: id
ORDINAL_POSITION: 1
COLUMN_DEFAULT: NULL
IS_NULLABLE: YES
DATA_TYPE: int
CHARACTER_MAXIMUM_LENGTH: NULL
CHARACTER_OCTET_LENGTH: NULL
NUMERIC_PRECISION: 10
NUMERIC_SCALE: 0
DATETIME_PRECISION: NULL
CHARACTER_SET_NAME: NULL
COLLATION_NAME: NULL
COLUMN_TYPE: int(11)
COLUMN_KEY:
EXTRA:
PRIVILEGES: select,insert,update,references
COLUMN_COMMENT:
GENERATION_EXPRESSION:
SRS_ID: NULL
*************************** 2. row ***************************
TABLE_CATALOG: def
TABLE_SCHEMA: sample
TABLE_NAME: mytable
COLUMN_NAME: Name
ORDINAL_POSITION: 2
COLUMN_DEFAULT: NULL
IS_NULLABLE: YES
DATA_TYPE: varchar
CHARACTER_MAXIMUM_LENGTH: 100
CHARACTER_OCTET_LENGTH: 400
NUMERIC_PRECISION: NULL
NUMERIC_SCALE: NULL
DATETIME_PRECISION: NULL
CHARACTER_SET_NAME: utf8mb4
COLLATION_NAME: utf8mb4_0900_ai_ci
COLUMN_TYPE: varchar(100)
COLUMN_KEY:
EXTRA:
PRIVILEGES: select,insert,update,references
COLUMN_COMMENT:
GENERATION_EXPRESSION:
SRS_ID: NULL
*************************** 3. row ***************************
TABLE_CATALOG: def
TABLE_SCHEMA: sample
TABLE_NAME: yourtable
COLUMN_NAME: id
ORDINAL_POSITION: 1
COLUMN_DEFAULT: NULL
IS_NULLABLE: YES
DATA_TYPE: int
CHARACTER_MAXIMUM_LENGTH: NULL
CHARACTER_OCTET_LENGTH: NULL
NUMERIC_PRECISION: 10
NUMERIC_SCALE: 0
DATETIME_PRECISION: NULL
CHARACTER_SET_NAME: NULL
COLLATION_NAME: NULL
COLUMN_TYPE: int(11)
COLUMN_KEY:
EXTRA:
PRIVILEGES: select,insert,update,references
COLUMN_COMMENT:
GENERATION_EXPRESSION:
SRS_ID: NULL
*************************** 4. row ***************************
TABLE_CATALOG: def
TABLE_SCHEMA: sample
TABLE_NAME: yourtable
COLUMN_NAME: YourName
ORDINAL_POSITION: 2
COLUMN_DEFAULT: NULL
IS_NULLABLE: YES
DATA_TYPE: varchar
CHARACTER_MAXIMUM_LENGTH: 100
CHARACTER_OCTET_LENGTH: 400
NUMERIC_PRECISION: NULL
NUMERIC_SCALE: NULL
DATETIME_PRECISION: NULL
CHARACTER_SET_NAME: utf8mb4
COLLATION_NAME: utf8mb4_0900_ai_ci
COLUMN_TYPE: varchar(100)
COLUMN_KEY:
EXTRA:
PRIVILEGES: select,insert,update,references
COLUMN_COMMENT:
GENERATION_EXPRESSION:
SRS_ID: NULL
4 rows in set (0.00 sec)

取得できる主な情報

  • TABLE_NAME / COLUMN_NAME: テーブル名とカラム名
  • DATA_TYPE / COLUMN_TYPE: データ型(int、varcharなど)
  • IS_NULLABLE: NULLを許容するかどうか
  • COLUMN_KEY: 主キーやインデックスの情報(PRI、UNIなど)
  • CHARACTER_SET_NAME / COLLATION_NAME: 文字セットと照合順序

特定のテーブルだけを対象にしたい場合は、WHERE table_schema = 'sample' AND table_name = 'mytable' のように条件を追加すれば絞り込みも可能です。スキーマ全体の設計を把握したいときや、ドキュメント作成時に非常に便利な手法なので、ぜひ活用してみてください。

  1. MySQLのすべてのテーブルを1行で一覧表示する方法

    MySQLの全テーブルを1行で表示するには? MySQLですべてのテーブルを一覧表示したい場合は、information_schema.tablesを利用します。このシステムビューに対してデータベース名(スキーマ名)をWHERE句で指定することで、特定のデータベースに属するテーブルだけを抽出できます。 さらにGROUP_CONCAT()関数を組み合わせると、複数のテーブル名をカンマ区切りで1行にまとめて取得することも可能です。 実行例:データベース「web」の全テーブルを表示する 次のクエリでは、データベース「web」内のすべてのテーブル名を1行で取得します。 mysql> SELECT

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

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