INFORMATION_SCHEMAデータベースでスキーマ情報を徹底活用
MySQLデータベースのテーブルスキーマを表示する方法
方法1:SHOW COLUMNS FROMコマンドを使う
これは、テーブルの構造を詳細に表示する最も簡単な方法です。
SHOW COLUMNS FROM テーブル名;
例:usersテーブルのスキーマを表示
SHOW COLUMNS FROM users;
出力例
Field | Type | Null | Key | Default | Extra
------- | -------- | -------- | -------- | -------- | --------
id | int(11) | NO | PRI | NULL | auto_increment
name | varchar(255) | YES | | NULL |
email | varchar(255) | YES | | NULL |
created_at | timestamp | YES | | CURRENT_TIMESTAMP |
updated_at | timestamp | YES | | CURRENT_TIMESTAMP |
各列の説明
Field
: カラム名Type
: データ型Null
: NULL値を許可するかどうかのフラグ (YES
またはNO
)Key
: カラムがキーとして使用されているかどうか (PRI
は主キー、UNI
はユニークキー、MUL
はマルチカラムインデックス)Default
: デフォルト値Extra
: その他の情報 (auto_increment
は自動的に増加するカラム)
方法2:DESCRIBEコマンドを使う
SHOW COLUMNS FROM
コマンドとほぼ同じですが、DESCRIBE
コマンドの方が出力結果が少し見やすい場合があります。
DESCRIBE テーブル名;
DESCRIBE users;
Field | Type | Null | Key | Default | Extra
------- | -------- | -------- | -------- | -------- | --------
id | int(11) | NO | PRI | NULL | auto_increment
name | varchar(255) | YES | | NULL |
email | varchar(255) | YES | | NULL |
created_at | timestamp | YES | | CURRENT_TIMESTAMP |
updated_at | timestamp | YES | | CURRENT_TIMESTAMP |
方法3:MySQL Workbenchを使う
MySQL Workbenchは、MySQLデータベースを管理するためのGUIツールです。
- MySQL Workbenchを起動し、接続したいデータベースに接続します。
- 左側のナビゲーションツリーで、スキーマを表示したいテーブルを選択します。
- 中央のタブ領域で、「構造」タブを選択します。
INFORMATION_SCHEMA
データベースのCOLUMNS
テーブルをクエリする- mysqldumpコマンドを使う
上記のいずれの方法でも、MySQLデータベースのテーブルスキーマを表示することができます。
自分に合った方法を選択して、テーブルの構造を確認しましょう。
# usersテーブルのスキーマを表示
SHOW COLUMNS FROM users;
Field | Type | Null | Key | Default | Extra
------- | -------- | -------- | -------- | -------- | --------
id | int(11) | NO | PRI | NULL | auto_increment
name | varchar(255) | YES | | NULL |
email | varchar(255) | YES | | NULL |
created_at | timestamp | YES | | CURRENT_TIMESTAMP |
updated_at | timestamp | YES | | CURRENT_TIMESTAMP |
# usersテーブルのスキーマを表示
DESCRIBE users;
Field | Type | Null | Key | Default | Extra
------- | -------- | -------- | -------- | -------- | --------
id | int(11) | NO | PRI | NULL | auto_increment
name | varchar(255) | YES | | NULL |
email | varchar(255) | YES | | NULL |
created_at | timestamp | YES | | CURRENT_TIMESTAMP |
updated_at | timestamp | YES | | CURRENT_TIMESTAMP |
テーブルスキーマを表示するその他の方法
INFORMATION_SCHEMA
データベースには、MySQLデータベースに関するメタデータが格納されています。
COLUMNS
テーブルには、すべてのテーブルの構造情報が格納されています。
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'テーブル名';
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'users';
TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | ORDINAL_POSITION | COLUMN_DEFAULT | IS_NULLABLE | DATA_TYPE | CHARACTER_MAXIMUM_LENGTH | CHARACTER_OCTET_LENGTH | NUMERIC_PRECISION | NUMERIC_SCALE | DATETIME_PRECISION | COLLATION_NAME | COLUMN_TYPE | COLUMN_KEY | EXTRA | PRIVILEGES | COLUMN_COMMENT
-------------- | -------------- | -------------- | -------------- | -------------- | -------------- | -------------- | -------------- | -------------- | -------------- | -------------- | -------------- | -------------- | -------------- | -------------- | -------------- | -------------- | -------------- | --------------
def | my_database | users | id | 1 | NULL | NO | int | 11 | NULL | 10 | 0 | NULL | utf8mb4_general_ci | int(11) | PRI | auto_increment | select,insert,update,references |
def | my_database | users | name | 2 | NULL | YES | varchar | 255 | NULL | NULL | NULL | NULL | utf8mb4_general_ci | varchar(255) | | | select,insert,update,references |
def | my_database | users | email | 3 | NULL | YES | varchar | 255 | NULL | NULL | NULL | NULL | utf8mb4_general_ci | varchar(255) | | | select,insert,update,references |
def | my_database | users | created_at | 4 | NULL | YES | timestamp | NULL | NULL | NULL | NULL | 0 | utf8mb4_general_ci | timestamp | | | select,insert,update,references |
def | my_database | users | updated_at | 5 | NULL | YES | timestamp | NULL | NULL | NULL | NULL | 0 | utf8mb4_general_ci | timestamp | | | select,insert,update,references |
mysqldump
コマンドを使って、テーブルのスキーマをダンプファイルに出力することができます。
mysqldump --no-data --skip-extended-insert --create-options テーブル名 > テーブル名.sql
例:usersテーブルのスキーマをusers.sqlファイルに出力
mysqldump --no-data --skip-extended-insert --create-options users > users.sql
-- MySQL dump 10.13 Distrib 8.0.27, for Linux (x86_64)
--
-- Host: localhost Database: my_database
-- ------------------------------------------------------
-- Server version 8.0.27
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Current database: `my_database`
--
USE `my_database`;
--
-- Table structure for table `users`
--
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!4010
mysql database schema