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 对比
| 特性 | ENUM | SET |
|---|---|---|
| 选择数量 | 单选 | 多选 |
| 最大成员数 | 65535 | 64 |
| 存储方式 | 整数索引 | 位图 |
| 典型场景 | 状态、性别 | 标签、权限 |
SQL
-- ENUM: 状态字段(单选)
status ENUM('pending', 'approved', 'rejected')
-- SET: 权限字段(多选)
permissions SET('read', 'write', 'delete', 'admin')
ENUM 和 SET 内部以数字存储,比字符串节省空间,但修改枚举值需 ALTER TABLE。
要点总结
- ENUM 用于单选场景,SET 用于多选场景
- ENUM 最多65535个成员,SET 最多64个
- 内部以数字存储,节省空间
- 修改枚举值需要修改表结构
📝 发现内容有误?点击此处直接编辑