MySQLでテーブルのカラムを表示して確認する
Table of Contents
- MySQLのSHOW COLUMNSステートメントの構文
- MySQLのSHOW COLUMNSの実行例
- SHOW COLUMNSのLIKE句で表示カラムを絞る
- SHOW COLUMNSのFULL修飾子でCollation(照合順序)とPrivileges(権限)とComment(コメント)を追加表示する
- SHOW COLUMNSが表示する値の説明
- SHOW COLUMNSをWHERE句で表示カラムを絞る
- 注意: SHOW COLUMNSは権限がないカラムは表示されない
- その他同様のステートメント
- MySQLのmysqlshowコマンドでも取得可能
- 最も手軽にテーブル構造を確認するのはDESCステートメント
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_nameとtbl_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 COLUMNSやSHOW 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は複数の存在を許してしまいます。
もし困る場合は、NullがNOにして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 COLUMNSとSHOW FIELDSは同じ処理を行います。
またDESCRIBEステートメントもSHOW COLUMNSと同じ情報を提供できます。
さらに、DESCRIBEとEXPLAINとDESCはシノニム(代替名)です。
つまり、次の行は全て同じ結果を返します。
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 のようにLIKEやWHERE句は使えません。
最も手軽にテーブル構造を確認するのはDESCステートメント
前述された情報から考えて、最もタイプ数が少なくて、手軽にテーブル構造を確認する方法はDESCステートメントを使うことです。
mysql> desc users;