mysql数据库中如何使用枚举类型

哎,说起MySQL的ENUM类型,这东西我接触得多了去了。
说实话,这玩意儿在特定场景下真挺有用的,但是用起来也得讲究方法。

记得有一次,我们公司一个项目里,要设计一个用户状态的字段,就考虑用ENUM。
我当时觉得这主意不错,因为用户状态就那么几种,用ENUM能保证数据的一致性,防止插入错误的数据。

定义ENUM类型的字段,操作其实很简单。
比如说,我们创建一个表来存储用户信息,可以这样写:
sql CREATE TABLE user_status ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(5 0), status ENUM('active', 'inactive', 'pending', 'suspended') );
这样,status字段就只能插入'active'、'inactive'、'pending'或'suspended'这四个值之一。

用起来也方便,插入数据的时候直接写对应的值就好:
sql INSERT INTO user_status (name, status) VALUES ('Alice', 'active');
但是,要注意几点。
比如,如果你插入了不在枚举列表中的值,MySQL会直接报错。
我当时没想明白,后来才知道这玩意儿是大小写敏感的,所以最好统一格式。

有意思的是,ENUM值实际上是存储为数字的。
比如'active'对应1 ,'inactive'对应2 这样存储,空间利用率高,对空间敏感的场景特别有用。

不过,用ENUM也有局限。
比如说,如果你需要修改枚举值列表,那就得用ALTER TABLE,而且新增的值只能加在末尾。
这块儿风险有点大,万一搞错了,现有数据的索引可能会错乱。

而且,ENUM类型的灵活性比较差。
如果你业务需求经常变,用ENUM就有点麻烦了。
跨数据库迁移的时候,可能也不兼容。

所以,有时候我们也会考虑替代方案。
比如说,用外键关联一个字典表,或者用MySQL 8 .0以上的CHECK约束,都能实现类似的功能。

总的来说,ENUM类型在固定值场景下挺实用的,但是用之前得权衡一下利弊。
设计数据库表的时候,根据实际业务需求来选择是否使用它,别盲目跟风。

一文掌握Mysql中的Enum数据类型

ENUM类型只能存储预定义的字符串集合。

存储空间:1 -2 5 5 个成员占1 字节,2 5 6 -6 5 5 3 5 个成员占2 字节。

底层用整数索引存储,如ENUM('男','女')中“男”是1 ,“女”是2
插入数据:可用字符串或索引整数插入,'0'转为空字符串,0或未定义值报错(1 2 6 5 )。

查询数据:sex+0可获取索引位置。

修改枚举定义:
减少值:现有数据不能含被删值。

插入值:首部插入会重置索引,中间插入后移索引,尾部插入不重置。

使用陷阱:
避免存数字,0和'0'会混淆。

JPA持久化:默认用整数顺序,改用@Enumerated(EnumType.STRING)存字符串。

最佳实践:
适合固定集合字符串(如性别)。

修改时优先尾部添加新值。

存数字或动态值用INT或VARCHAR。

你自己掂量。

TypeScript Enums(枚举)

Direction枚举定义: typescript enum Direction { Up = 1 , Down, Left, Right }
Direction[1 ] = Up。

Status枚举定义: typescript enum Status { Active = "ACTIVE", Inactive = "INACTIVE" }
Status["ACTIVE"] = Active。

混合枚举不推荐。
业务逻辑中使用枚举清晰处理状态。