全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-15 7 分钟 ✍️ juanwangdev

MySQL 枚举与集合类型

MySQL 的 ENUM 和 SET 类型用于存储预定义值列表,ENUM 为单选,SET 为多选。

ENUM 枚举类型

ENUM 用于存储单一值,从预定义列表中选择。

SQL
-- ENUM 定义
CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    status ENUM('active', 'inactive', 'banned'),
    gender ENUM('male', 'female', 'other')
);

-- 插入数据
INSERT INTO users VALUES (1, '张三', 'active', 'male');
INSERT INTO users VALUES (2, '李四', 'inactive', 'female');

-- 使用索引插入(1=第一个值)
INSERT INTO users VALUES (3, '王五', 1, 2);

ENUM 查询

SQL
-- 按值查询
SELECT * FROM users WHERE status = 'active';

-- 按索引查询
SELECT * FROM users WHERE status = 1;

-- 查看允许的值
SHOW COLUMNS FROM users WHERE Field = 'status';

SET 集合类型

SET 用于存储多个值,从预定义列表中多选。

SQL
-- SET 定义
CREATE TABLE articles (
    id INT PRIMARY KEY,
    title VARCHAR(100),
    tags SET('tech', 'life', 'travel', 'food', 'music')
);

-- 插入多个值
INSERT INTO articles VALUES (1, '文章1', 'tech,life');
INSERT INTO articles VALUES (2, '文章2', 'travel,food,music');

-- 单个值
INSERT INTO articles VALUES (3, '文章3', 'tech');

SET 查询

SQL
-- 精确匹配
SELECT * FROM articles WHERE tags = 'tech,life';

-- 包含某个标签
SELECT * FROM articles WHERE FIND_IN_SET('tech', tags);

-- 使用位运算
SELECT * FROM articles WHERE tags & 1;  -- 第一个选项

ENUM vs SET 对比

特性ENUMSET
选择数量单选多选
最大成员数6553564
存储方式整数索引位图
典型场景状态、性别标签、权限
SQL
-- ENUM: 状态字段(单选)
status ENUM('pending', 'approved', 'rejected')

-- SET: 权限字段(多选)
permissions SET('read', 'write', 'delete', 'admin')

ENUM 和 SET 内部以数字存储,比字符串节省空间,但修改枚举值需 ALTER TABLE。

要点总结

  • ENUM 用于单选场景,SET 用于多选场景
  • ENUM 最多65535个成员,SET 最多64个
  • 内部以数字存储,节省空间
  • 修改枚举值需要修改表结构

📝 发现内容有误?点击此处直接编辑

← 上一篇 MySQL 日期和时间类型
下一篇 → MySQL 浮点数类型
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库