読者です 読者をやめる 読者になる 読者になる

It's raining cats and dogs.

無駄なことなんてないはず

mysqlで全テーブルのカラム一覧を見たい

情弱メモ。
mysqlでテーブル一覧とかカラム一覧とかを見るときは

/* テーブル一覧 */
mysql> show tables;
/* カラム一覧 */
mysql> desc <table_name>;

みたいにやるんだけど、mysqlコマンドではなくて、sqlで確認したいときは

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema | 
| projectdb     | 
| test               | 
+--------------------+

で表示されるinformation_schemaというDBにいろんな情報が入ってるので、このDBを使うと良い。
information_schemaのテーブル一覧を見ると

mysql> use information_schema;
mysql> show tables;
+---------------------------------------+
| Tables_in_information_schema          |
+---------------------------------------+
| CHARACTER_SETS                        | 
| COLLATIONS                            | 
| COLLATION_CHARACTER_SET_APPLICABILITY | 
| COLUMNS                               | 
| COLUMN_PRIVILEGES                     | 
| ENGINES                               | 
| EVENTS                                | 
| FILES                                 | 
| GLOBAL_STATUS                         | 
| GLOBAL_VARIABLES                      | 
| KEY_COLUMN_USAGE                      | 
| PARAMETERS                            | 
| PARTITIONS                            | 
| PLUGINS                               | 
| PROCESSLIST                           | 
| PROFILING                             | 
| REFERENTIAL_CONSTRAINTS               | 
| ROUTINES                              | 
| SCHEMATA                              | 
| SCHEMA_PRIVILEGES                     | 
| SESSION_STATUS                        | 
| SESSION_VARIABLES                     | 
| STATISTICS                            | 
| TABLES                                | 
| TABLESPACES                           | 
| TABLE_CONSTRAINTS                     | 
| TABLE_PRIVILEGES                      | 
| TRIGGERS                              | 
| USER_PRIVILEGES                       | 
| VIEWS                                 | 
| INNODB_CMP_RESET                      | 
| INNODB_TRX                            | 
| INNODB_CMPMEM_RESET                   | 
| INNODB_LOCK_WAITS                     | 
| INNODB_CMPMEM                         | 
| INNODB_CMP                            | 
| INNODB_LOCKS                          | 
+---------------------------------------+

こんな感じのテーブル一覧があるので、TABLESとかCOLUMNSとかのテーブルを使って調べれば良い。
たとえば、「projectdb」というDBの全テーブルのカラム一覧を表示したいなら

mysql> desc COLUMNS;
+--------------------------+---------------------+------+-----+---------+-------+
| Field                    | Type                | Null | Key | Default | Extra |
+--------------------------+---------------------+------+-----+---------+-------+
| TABLE_CATALOG            | varchar(512)        | NO   |     |         |       | 
| TABLE_SCHEMA             | varchar(64)         | NO   |     |         |       | 
| TABLE_NAME               | varchar(64)         | NO   |     |         |       | 
| COLUMN_NAME              | varchar(64)         | NO   |     |         |       | 
| ORDINAL_POSITION         | bigint(21) unsigned | NO   |     | 0       |       | 
| COLUMN_DEFAULT           | longtext            | YES  |     | NULL    |       | 
| IS_NULLABLE              | varchar(3)          | NO   |     |         |       | 
| DATA_TYPE                | varchar(64)         | NO   |     |         |       | 
| CHARACTER_MAXIMUM_LENGTH | bigint(21) unsigned | YES  |     | NULL    |       | 
| CHARACTER_OCTET_LENGTH   | bigint(21) unsigned | YES  |     | NULL    |       | 
| NUMERIC_PRECISION        | bigint(21) unsigned | YES  |     | NULL    |       | 
| NUMERIC_SCALE            | bigint(21) unsigned | YES  |     | NULL    |       | 
| CHARACTER_SET_NAME       | varchar(32)         | YES  |     | NULL    |       | 
| COLLATION_NAME           | varchar(32)         | YES  |     | NULL    |       | 
| COLUMN_TYPE              | longtext            | NO   |     | NULL    |       | 
| COLUMN_KEY               | varchar(3)          | NO   |     |         |       | 
| EXTRA                    | varchar(27)         | NO   |     |         |       | 
| PRIVILEGES               | varchar(80)         | NO   |     |         |       | 
| COLUMN_COMMENT           | varchar(1024)       | NO   |     |         |       | 
+--------------------------+---------------------+------+-----+---------+-------+

このあたりのテーブルを使って

select TABLE_NAME, COLUMN_NAME from COLUMNS where TABLE_SCHEMA = 'projectdb';

などとすればそれらしき情報が取得できるようです。

そういえば、はてな記法のシンタックスハイライトにmysqlというのがあってびっくりした。