MySQL枚举数据类型enum有哪些优点

ENUM 就是这个东西。
我以前在做项目时经常使用它。
让我告诉你我的经历。

就说去年我在一个小型用户管理系统中使用过它。
在这个系统中有一个性别字段,所以我想到使用ENUM(“男”,“女”,“未知”)来避免人们填写复杂的字段和编辑数据。
结果呢?真是省心,没人填写“帅哥”、“工人”表格。
我感受最深的就是这种“限制”。
数据在到达之前被构造。
可以避免多少问题。

然后有空间。
我记得当时我们的表中有一个状态字段,有几种状态:“待处理”、“处理中”、“已完成”、“已取消”。
使用ENUM来设置它们,每个为2 个字节。
与 VARCHAR 不同,以 UTF-8 编码时,四个“终止”字可以占用 3 或 4 个字节。
想想看,随着表变大,索引变小,查询会不会更快?这种“节省空间”和“运行速度快”在当时数以百万计的手表中显得相当明显。
虽然现在还有其他的优化方法,但这在当时确实有很大帮助。

但是,ENUM 也有其缺陷。
可能去年有人要求将“处理中”更改为“正在审查中”。
我一听就头疼。
我需要改变表结构!更改 ENUM 类型并重试。
你觉得尴尬不尴尬?数据量一增加,这东西就会害死人。
所以,就“灵活性”而言,ENUM确实逊色一些。
如果这些选项经常变化,你在使用它们时会遭受很大的损失。

一般来说,ENUM适合那些值固定且经常使用的字段。
例如性别、身份、季节等,无忧无虑,性能良好。
但如果您认为这些值实际上可以改变,那么就不要使用它们。
改变它们太复杂了。
在过去十年里我陷入的陷阱中,ENUM 是一个真正的教训。

MySQL枚举类型详解mysql中enum

说白了,MySQL的枚举类型其实很简单。
它就像一个列表,定义了特定字段可以具有的所有可能值。
我们先来说说最重要的事情。
例如,如果我们定义一个水果表,其中的颜色字段只能是“红色”、“绿色”或“蓝色”,以避免插入错误的颜色值。
还有一点是枚举类型最多可以保存6 5 5 3 5 个值,但是更改枚举中的值可能会破坏现有数据的一致性。
就像我们去年跑的项目一样,因为一个简单的枚举值的改变,就需要手动更正数百位数据。
还有另一个关键细节。
例如,ALTER TABLE语句可用于更改或删除枚举列,但在此过程中必须小心,因为如果操作不正确,可能会丢失数据。

一开始我以为枚举类型很强大,后来发现如果使用不小心,比如在枚举值中插入新值,就会导致数据不一致。
等等,那是另一回事了。
虽然枚举类型限制了选项,但它也限制了灵活性。
例如,如果需要动态添加新的枚举值,则必须停止服务来更改表结构。

所以,在使用枚举类型时,我认为值得一试,但你也应该意识到其局限性和可能的​​风险。
很多人没有注意到这一点,但我觉得很困惑。
如果您正在考虑使用枚举类型,我建议您首先评估您的需求,以确保它不会影响您的数据完整性。