ENUM
是 MySQL 中的一种数据类型,它用于定义一个列的取值范围,列的值必须是事先定义好的几个选项之一。ENUM
类型通常用于表示某个字段的状态或分类,如性别、产品类型等。
1. ENUM
的定义
在 MySQL 中,定义 ENUM
字段时,可以列出一系列允许的值。例如,如果我们要存储一个字段,表示用户的性别,可以使用 ENUM
类型来限定字段的值为 male
(男)和 female
(女)。
2. 语法
CREATE TABLE table_name (column_name ENUM('value1', 'value2', 'value3', ...)
);
3. 示例
假设我们要创建一个 users
表,其中包含一个表示用户状态的字段 status
,它只能是以下值之一:active
(激活),inactive
(未激活),suspended
(暂停)。
CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100),status ENUM('active', 'inactive', 'suspended') NOT NULL
);
4. 插入数据
插入数据时,只能使用 ENUM
类型定义中的值:
INSERT INTO users (name, status) VALUES ('Alice', 'active');
INSERT INTO users (name, status) VALUES ('Bob', 'inactive');
如果尝试插入一个未定义的值,比如 unknown
,MySQL 会报错或将其存储为空值(如果未设置 NOT NULL
约束):
INSERT INTO users (name, status) VALUES ('Charlie', 'unknown'); -- 错误
5. ENUM
的内部实现
MySQL 中,ENUM
类型的字段实际上是一个数字值,每个值在 ENUM
定义时都有一个索引,索引从 1 开始。例如:
'active'
的索引是 1'inactive'
的索引是 2'suspended'
的索引是 3
因此,存储的是这些数字值而不是字符串。
6. 使用 ENUM
的优缺点
优点:
- 节省存储空间:由于
ENUM
使用数字存储,通常比存储字符串更加节省空间。 - 限制数据范围:可以确保数据只能是有限的一组值。
缺点:
- 扩展性差:如果需要增加新的选项,需要修改表结构,这在某些情况下可能不是很灵活。
- 可读性差:如果
ENUM
的值过多,直接查看数据库中的数字值会显得不直观。
7. 总结
ENUM
类型适合于那些有固定选项的字段,例如性别、状态等。它限制了列的取值范围,并且通过数字存储提供了空间效率。但是在选项较多或需要频繁变动时,可能不是最佳选择。