MySQL - ENUM: 初心者向けのやさしいガイド

こんにちは、未来のデータベースの魔法使いさんたち!今日は、MySQLのENUMデータ型の世界に興味深い旅に出発します。プログラミングが初めてでも心配しないでください。私はあなたの親切なガイドとして、このトピックをステップバイステップで探求します。コーヒー(またはあなたの好みのティー)を手に取り、一緒に飛び込んでみましょう!

MySQL - ENUM

MySQLのENUMデータ型

ピザレストランのデータベースを作成しているとしましょう。ピザのサイズを保存したいけれど、選択肢は特定のものだけです:小、中、大。ここで ENUM が役立ちます!

ENUMは「列挙」の略で、「定義されたオプションのリスト」という洒落た言い方です。MySQLがあなたが与えた選択肢からの回答のみを許可するマルチチョイスクエスチョンのようなものです。

以下に簡単なテーブルを作成して説明します:

CREATE TABLE pizza_orders (
id INT AUTO_INCREMENT PRIMARY KEY,
customer_name VARCHAR(50),
size ENUM('small', 'medium', 'large')
);

この例では、size は私たちの ENUM 列です。それは指定した3つの値のいずれかを含むことができます:'small'、'medium'、または 'large'。

ENUMの属性

ENUMのいくつかの素晴らしい機能について話しましょう:

  1. 順序付きリスト:ENUM値の定義順序は重要です。MySQLは各値に1から始まる番号を割り当てます。

  2. 大文字小文字区別なし:'SMALL'、'Small'、および 'small' はすべて同じように扱われます。

  3. ストレージ効率:ENUMはストレージ効率が非常に高いです。MySQLは各値を文字列ではなく番号(1、2、3など)として保存します。

  4. デフォルト値:レコードを插入するときに値を指定しない場合、MySQLは ENUM リストの最初の値をデフォルトとして使用します。

数値的なENUM値を使用してレコードを插入

ここに小さな秘密があります:ENUM値を插入するために数値を使用できます!試してみましょう:

INSERT INTO pizza_orders (customer_name, size) VALUES
('Alice', 1),
('Bob', 2),
('Charlie', 3);

この場合:

  • 1は 'small' を表します
  • 2は 'medium' を表します
  • 3は 'large' を表します

結果を確認しましょう:

SELECT * FROM pizza_orders;

MySQLが数値を対応するENUM値として正しく解釈したことが確認できます。すごいですね?

無効なレコードを插入

では、無効な値を插入しようとするとどうなるのでしょうか?試してみましょう:

INSERT INTO pizza_orders (customer_name, size) VALUES ('David', 'extra-large');

ああ、間違えました!MySQLは 'extra-large' が定義されたリストにないため、エラーを返します。真偽の質問で「D」を選ぶのと同じで、機能しません!

数値的なENUM値でレコードをフィルタリング

ENUM値が数値として保存されていることを思い出してください。これをフィルタリングの利点として利用できます:

SELECT * FROM pizza_orders WHERE size = 2;

このクエリは、中サイズのピザのすべての注文を返します。シークレットコードのようなものですね - 2は中サイズを意味します!

人間が読めるENUM値でレコードをフィルタリング

もちろん、実際のENUM値を使用してフィルタリングすることもできます:

SELECT * FROM pizza_orders WHERE size = 'large';

このクエリは、大サイズのピザのすべての注文を取得します。より直感的ですよね?

ENUMデータ型の欠点

さて、私は良い先生として、いくつかの潜在的な落とし穴について警告しないではいけません:

  1. 柔軟性の欠如:ENUMを定義した後、値を追加または削除するにはテーブル構造を変更する必要があります。ゲームの途中でルールを変更するのと同じです!

  2. データベース依存性:アプリケーションロジックがこれらのENUM値に依存している場合、アプリケーションはデータベース構造に密接に関連しています。

  3. ソートの制限:ENUM値は内部的な数値に基づいてソートされますが、必ずしも望む結果にならないかもしれません。

クライアントプログラムを使用したENUMデータ型

ENUMをクライアントプログラム(PHPやPythonスクリプトなど)で使用する際には、通常は人間が読める値とやりとりします。しかし、内部的な数値表現について知っておくことは良いことです。

以下に、私たちが議論したENUMメソッドの表を示します:

メソッド 説明
ENUMの作成 ENUM('small', 'medium', 'large') 許可された値を定義
文字列による插入 INSERT ... VALUES ('medium') 実際のENUM値を使用
数値による插入 INSERT ... VALUES (2) 数値表現を使用
文字列によるフィルタリング WHERE size = 'large' ENUM値を使用
数値によるフィルタリング WHERE size = 3 数値表現を使用

覚えておいてください、クライアントプログラムを使用していても、これらの原則は変わりありません。

そして、ここまでがMySQLのENUMについての旅です。作成から値の插入、そして内部の数値表現に至るまで、あなたはENUMをデータベースの冒険で使用するための準備ができています。

ただし、ピザのトッピングを選ぶのと同じように、 ENUMは固定されたオプションがある場合に非常に便利です。しかし、新しいフレーバーを頻繁に追加したい場合、別のアプローチを検討する時期が来るかもしれません。

練習を続け、好奇心を持ち、ハッピーコーディングを!次回ピザを注文する際に、データベース構造について考えるかもしれません。(または、私だけかもしれませんね??)

Credits: Image by storyset