以下是原文翻译成繁體中文的內容:

MySQL - ENUM

# MySQL - ENUM:初学者的友好指南

你好,未來的數據庫大師!今天,我們將踏上一段令人興奮的旅程,探訪MySQL的ENUM數據類型。別擔心你對編程還是新手——我會成為你的友好指導者,我們將一步步探索這個主題。所以,來一杯咖啡(或者茶,如果你喜歡的話),我們一起來深入了解一下!

## MySQL ENUM 數據類型

想像一下你正在為一家披薩餐廳創建數據庫。你想要存儲披薩的大小,但你知道只有特定的選項:小,中,和大。這就是ENUM派上用場的地方!

ENUM,全稱為"enumerate"(列舉),是一種花哨的說法,意味著"一組預定義的選項"。這就像一個多選題,MySQL只允許從你給定的選項中選擇答案。

讓我們創建一個簡單的表來演示:

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

在這個例子中,size是我們的ENUM列。它只能包含我們指定三個值中的一個:'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 數據類型

當通過客戶端程序(如PHP或Python腚本)使用ENUM時,你通常會與可讀值交互。然而,了解底層的數字表示也是好的。

這裡是一個總結我們討論過的ENUM方法的表格:

方法 示例 描述
創建 ENUM ENUM('small', 'medium', 'large') 定義允許的值
使用字符串插入 INSERT ... VALUES ('medium') 使用實際的ENUM值
使用數字插入 INSERT ... VALUES (2) 使用數字表示
使用字符串過濾 WHERE size = 'large' 使用ENUM值過濾
使用數字過濾 WHERE size = 3 使用數字表示過濾

記住,無論你是使用客戶端程序還是直接在MySQL中工作,這些原則都是相同的。

好了,各位!我們已經穿越了MySQL ENUM的土地。從創建它們到插入值,甚至窺探它們的秘密數字身份,現在你已經裝備好了在數據庫冒險中使用ENUM的知識。

記住,就像為披薩選擇配料一樣,ENUM在你有一組固定的選項時非常棒。但如果你發現自己不斷想要添加新口味,也許是時候考慮一種不同的方法了。

繼續練習,保持好奇心,開心編程!也許下次你訂購披薩時,你會思考數據庫結構。(或者這只是我??)

Credits: Image by storyset