MySQLの達人だけが知っている!ENUMとINTの使い分けテクニック
MySQLにおけるENUMとINTの比較:分かりやすい解説
ENUMの利点
- 読みやすさ: データベーススキーマやコードにおいて、意味のある名前で値を定義できます。
- 安全性: 定義された値以外を代入できないため、データの整合性を保てます。
- 効率性: 特定の値の存在チェックなど、クエリのパフォーマンスを向上させる場合があります。
- 表現力: INT型と比べて表現できる値の範囲が狭くなります。
- メモリ使用量: INT型よりも多くのメモリを使用する場合があります。
INTの利点
- 表現力: 広い範囲の値を表現できます。
- 安全性: 不正な値が代入される可能性があり、データの整合性が損なわれるリスクがあります。
- 読みやすさや安全性を重視する場合はENUMを選択
- 表現力やメモリ使用量を重視する場合はINTを選択
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
gender ENUM('male', 'female', 'other') NOT NULL
);
国籍を定義するENUM型
CREATE TABLE countries (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
code ENUM('JP', 'US', 'UK', 'FR', 'DE') NOT NULL
);
CREATE TABLE products (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
price DECIMAL(10,2) NOT NULL,
status ENUM('in stock', 'out of stock', 'discontinued') NOT NULL
);
INT型を使用する例
CREATE TABLE orders (
id INT PRIMARY KEY AUTO_INCREMENT,
customer_id INT NOT NULL,
product_id INT NOT NULL,
quantity INT NOT NULL,
total_price DECIMAL(10,2) NOT NULL
);
ENUM型とINT型の比較
-- ENUM型
SELECT gender FROM users WHERE gender = 'male';
-- INT型
SELECT gender FROM users WHERE gender = 1;
- コードの読みやすさが向上
- データの整合性を保ちやすい
- 表現できる値の範囲が狭い
- 広い範囲の値を表現できる
- 値の意味を理解しづらい
結論
- 読みやすさや安全性
ENUM型とINT型の比較:その他の方法
データ型 | 利点 | 欠点 | 例 |
---|---|---|---|
ENUM | * 読みやすい * 安全性が高い * 特定の値の存在チェックなど、クエリのパフォーマンスを向上させる場合がある | * 表現できる値の範囲が狭い * INT型よりも多くのメモリを使用する場合がある | 性別、国籍、商品状態 |
INT | * 広い範囲の値を表現できる * ENUM型よりも少ないメモリを使用する | * 値の意味を理解しづらい * 不正な値が代入される可能性があり、データの整合性が損なわれるリスクがある | ID、数量、価格 |
コードの比較
ENUM型を使用する場合
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
gender ENUM('male', 'female', 'other') NOT NULL
);
-- 性別が男性のユーザーを取得
SELECT * FROM users WHERE gender = 'male';
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
gender INT NOT NULL
);
-- 性別が男性のユーザーを取得
SELECT * FROM users WHERE gender = 1;
パフォーマンスの比較
特定の値の存在チェックなど、特定の状況ではENUM型の方がINT型よりもクエリのパフォーマンスが向上する場合があります。
mysql