MySQLでテーブルのカラムを表示して確認する

MySQLでテーブルのカラムを表示して確認する

Table of Contents

MySQLでテーブルのカラム一覧を表示するには、SHOW COLUMNSステートメントを使います。
SHOW COLUMNS構文は指定したテーブル内のカラム情報を表示します。
これはビューのカラムも表示します。

MySQLのSHOW COLUMNSステートメントの構文

SHOW [FULL] COLUMNS {FROM | IN} tbl_name [{FROM | IN} db_name] [LIKE 'pattern | WHERE expr]

[]は任意で、{|}はどちらかを選択になります。

MySQLのSHOW COLUMNSの実行例

次の例は、USEステートメントでDBhoge_developmentを選択したのちにSHOW COLUMNSを実行してます。

mysql> show columns from users;
+-----------------+--------------+------+-----+---------+----------------+
| Field           | Type         | Null | Key | Default | Extra          |
+-----------------+--------------+------+-----+---------+----------------+
| id              | bigint(20)   | NO   | PRI | NULL    | auto_increment |
| email           | varchar(255) | YES  |     | NULL    |                |
| password_digest | varchar(255) | YES  |     | NULL    |                |
| created_at      | datetime(6)  | NO   |     | NULL    |                |
| updated_at      | datetime(6)  | NO   |     | NULL    |                |
+-----------------+--------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

DB名とテーブル名のFROM句を結合する

db_nametbl_name.で繋ぐことができます。次の2つは同等です。

mysql> show full columns from users from hoge_development;
mysql> show full columns from hoge_development.users;

SHOW COLUMNSのLIKE句で表示カラムを絞る

構文内にあるLIKE句を使うことで表示カラムを選択できます。
LIKE句はカラム名と照合します。

mysql> show columns from users like '%_at';
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| created_at | datetime(6) | NO   |     | NULL    |       |
| updated_at | datetime(6) | NO   |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

SHOW COLUMNSのFULL修飾子でCollation(照合順序)とPrivileges(権限)とComment(コメント)を追加表示する

構文内にあるFULL装飾子がついたSHOW FULL COLUMNSを使うことで出力カラムにCollation(照合順序)とPrivileges(権限)とComment(コメント)を表示します。

mysql> show full columns from users;
+-----------------+--------------+--------------------+------+-----+---------+----------------+---------------------------------+---------+
| Field           | Type         | Collation          | Null | Key | Default | Extra          | Privileges                      | Comment |
+-----------------+--------------+--------------------+------+-----+---------+----------------+---------------------------------+---------+
| id              | bigint(20)   | NULL               | NO   | PRI | NULL    | auto_increment | select,insert,update,references |         |
| email           | varchar(255) | utf8mb4_general_ci | YES  |     | NULL    |                | select,insert,update,references |         |
| password_digest | varchar(255) | utf8mb4_general_ci | YES  |     | NULL    |                | select,insert,update,references |         |
| created_at      | datetime(6)  | NULL               | NO   |     | NULL    |                | select,insert,update,references |         |
| updated_at      | datetime(6)  | NULL               | NO   |     | NULL    |                | select,insert,update,references |         |
+-----------------+--------------+--------------------+------+-----+---------+----------------+---------------------------------+---------+
5 rows in set (0.00 sec)

SHOW COLUMNSが表示する値の説明

SHOW COLUMNSSHOW FULL COLUMNSが表示する値について説明します。

Field(フィールド)

Fieldフィールドはテーブルのカラム名です。

Type(カラムデータ型)

Typeフィールドはカラムデータの型です。

Collation(照合順序)

Collationフィールドは文字列カラムの照合順序です。文字列でもバイナリは除きます。
その他の型の場合はNULLになります。

この値はFULL装飾子を使ったときだけ表示されます。

Null

NullフィールドはNULLを格納できるかどうかを示します。
NULLを設定できる場合はYES、できない場合はNOが表示されます。

Key

Keyフィールドはこのカラムのインデックス設定を(空)/PRI/UNI/MULのいずれかで示します。

Keyが空の場合

インデックス未設定か、

KeyがPRIの場合

PRIMARY KEYか、マルチカラムPRIMARY KEYの一つです。

KeyがUNIの場合

UNIQUEインデックスです。

NULLは複数の存在を許してしまいます。
もし困る場合は、NullNOにしてNULL自体を拒否してください。

KeyがMULの場合

特定の値が複数存在することを許可した一意(ユニーク)ではないインデックスの最初のカラムです。

Default

Defaultフィールドはカラムのデフォルト値です。
デフォルト値がNULLだったり、カラム定義にDEFAULT句がない場合はNULLが表示されます。

Extra

Extraフィールドは追加情報が含まれます。
この値が空以外になるのは、次のケースです。

  • AUTO_INCREMENT属性を持つカラムだとauto_incrementが表示されます。
  • ON UPDATE CURRENT_TIMESTAMP属性を持つTIMESTAMPまたはDATETIMEカラムだとon update CURRENT_TIMESTAMPが表示されます。

Privileges(権限)

Privilegesフィールドはユーザーがカラムに持っている権限を示します。
この値はFULL装飾子を使ったときだけ表示されます。

Comment(コメント)

Commentフィールドは任意のコメントを示します。
この値はFULL装飾子を使ったときだけ表示されます。

SHOW COLUMNSをWHERE句で表示カラムを絞る

構文内にあるWHERE句を使うことで表示カラムを選択できます。
テーブルusersからTypeカラムに対して照合すると次のようになります。

mysql> show columns from users where Type like '%char%';
+-----------------+--------------+------+-----+---------+-------+
| Field           | Type         | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------+-------+
| email           | varchar(255) | YES  |     | NULL    |       |
| password_digest | varchar(255) | YES  |     | NULL    |       |
+-----------------+--------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

注意: SHOW COLUMNSは権限がないカラムは表示されない

カラムに対する権限を持っていない場合は、SHOW COLUMNSの結果に表示されません。

その他同様のステートメント

構文にもあるようにSHOW COLUMNSSHOW FIELDSは同じ処理を行います。

またDESCRIBEステートメントもSHOW COLUMNSと同じ情報を提供できます。
さらに、DESCRIBEEXPLAINDESCはシノニム(代替名)です。
つまり、次の行は全て同じ結果を返します。

mysql> show columns from users;
mysql> show fields from users;
mysql> describe users;
mysql> explain users;
mysql> desc users;

ただし、SHOW FULL COLUMNSで追加表示されるカラムは、DESCRIBEステートメントには表示されません。

MySQLのmysqlshowコマンドでも取得可能

ターミナル上でmysqlshowコマンドを実行することで、同様にMySQLのカラム一覧を表示できます。

$ mysqlshow -uroot hoge_development users
Database: hoge_development  Table: users
+-----------------+--------------+--------------------+------+-----+---------+----------------+---------------------------------+---------+
| Field           | Type         | Collation          | Null | Key | Default | Extra          | Privileges                      | Comment |
+-----------------+--------------+--------------------+------+-----+---------+----------------+---------------------------------+---------+
| id              | bigint(20)   |                    | NO   | PRI |         | auto_increment | select,insert,update,references |         |
| email           | varchar(255) | utf8mb4_general_ci | YES  |     |         |                | select,insert,update,references |         |
| password_digest | varchar(255) | utf8mb4_general_ci | YES  |     |         |                | select,insert,update,references |         |
| created_at      | datetime(6)  |                    | NO   |     |         |                | select,insert,update,references |         |
| updated_at      | datetime(6)  |                    | NO   |     |         |                | select,insert,update,references |         |
+-----------------+--------------+--------------------+------+-----+---------+----------------+---------------------------------+---------+

ただし、SHOW COLUMNS のようにLIKEWHERE句は使えません。

最も手軽にテーブル構造を確認するのはDESCステートメント

前述された情報から考えて、最もタイプ数が少なくて、手軽にテーブル構造を確認する方法はDESCステートメントを使うことです。

mysql> desc users;
このエントリーをはてなブックマークに追加