首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL ENUM 枚舉類型深度解析與操作指南

     編輯:MySQL 資料庫相關知識

ENUM 為字符串枚舉類型,存儲預定義集合中的單一值,1-255 個成員佔 1 字節,256-65535 佔 2 字節,最多 65535 個成員。

創建與測試

CREATE TABLE user_sex (sex ENUM('M','F'));
INSERT INTO user_sex VALUES ('M'), ('s'), ('2'), ('f');
-- 實際存儲:'M', 'M', 'M', 'F'

核心行為規則

  1. 大小寫不敏感:'f' 自動轉為 'F'。
  2. 非法值強制轉為第一個枚舉值:'s'、'2' 均存為 'M',**不報錯**,僅產生警告(嚴格模式下報錯)。
  3. 單值選擇:每行僅能取集合中一個值,不支援多選。
  4. 數值索引訪問:INSERT ... VALUES (1) 存儲第一個枚舉值 'M';ORDER BY sex 按定義順序排序('M' < 'F')。

增刪改查標準寫法

-- 假設表 xxx(folder ENUM('inbox','outbox','other'))

-- 插入
INSERT INTO xxx (folder) VALUES ('inbox'), ('outbox'), ('other');

-- 更新
UPDATE xxx SET folder = 'inbox' WHERE id = 1;

-- 刪除
DELETE FROM xxx WHERE folder = 'outbox';

-- 查詢(按枚舉順序)
SELECT * FROM xxx ORDER BY folder;

優缺點權衡

優點缺點
存儲緊湊(1-2 字節)修改枚舉值需 ALTER TABLE,鎖表風險
數據完整性約束(非嚴格模式下僅警告)非法值靜默轉換,易隱藏 Bug
排序符合業務邏輯順序不可直接 JOIN 字符串表(需 CAST)

建議

  • 穩定、有限值集(如性別、狀態、類別)優先考慮 ENUM。
  • 需頻繁擴展值集或跨表復用,改用 TINYINT + 查找表 或 CHECK 约束(8.0.16+)。
  • 生產環境**啟用嚴格 SQL 模式**(STRICT_TRANS_TABLES),非法值直接報錯。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved