MySQL ENUM17 Mar 2025 | 4 分钟阅读 MySQL 中的 ENUM 数据类型是 **字符串对象**。它允许我们在创建表时,在列规范中限制从允许值列表中选择的值。它是 **枚举** (enumeration) 的缩写,意味着每一列只能包含指定可能值中的一个。它使用 **数字索引** (1, 2, 3...) 来表示字符串值。 MySQL ENUM 数据类型具有以下优点
语法以下是用于在列中定义 ENUM 数据类型的语法 在上面的语法中,我们只定义了三个 ENUM 值,但可以根据我们的需要进行增加。在这里,我们必须确保枚举值始终放在 **引号括起来的字符串字面量** 中。 MySQL 允许我们使用以下属性定义 ENUM 数据类型 NOT NULL: 默认情况下,ENUM 数据类型为 NULL。如果我们不想允许 NULL 值,则在指定 ENUM 列时必须使用 NOT NULL 属性。 NULL: 它是 DEFAULT NULL 的同义词,其索引值始终为 NULL。 DEFAULT: 当列中未指定值时,ENUM 数据类型将插入默认值。换句话说,如果 INSERT 语句未为该列提供值,则将插入默认值。DEFAULT 表达式不允许插入函数。MySQL 中的 ENUM 数据类型包含 NULL 或空字符串 ('') 作为 DEFAULT 值。 MySQL ENUM 示例让我们通过以下说明来理解 ENUM 数据类型在 MySQL 中的工作原理。在这里,我们将创建一个名为 "shirts" 的表,其中包含三列:id、name 和 size。 size 列使用 ENUM 数据类型,包含 small、medium、large 和 x-large 这几种尺码。MySQL 将这些枚举成员映射到数字索引,其中 small=1,medium=2,large=3,x-large=4。执行以下查询来创建表 接下来,我们需要 **插入** 值到表中。在插入时,枚举值可以作为字符串字面量或其数字索引插入,两者是相同的。执行以下语句将值插入表中 现在,执行 SELECT 语句 查看插入到表中的值 下图包含了上述所有查询结果,其中仅包含字符串字面量形式的枚举值 ![]() ENUM 排序MySQL 根据数字索引对枚举值进行排序,该索引取决于我们在列规范中插入数据的顺序。**例如**,如果我们定义了枚举 ENUM ('b', 'a', '', 'c')。那么,'b' 排在 'a' 之前,空字符串排在 'c' (非空字符串) 之前,NULL 值排在其他值之前。 因此,如果我们不想在 `ORDER BY` 子句中使用 ENUM 数据类型时得到意外的结果,请遵循以下规则
下面的示例更清楚地解释了枚举排序。因此,如果您想以特定顺序获取衬衫的尺码,请执行以下语句 此查询将得到如下输出,我们可以看到衬衫的尺码是按降序排列的 ![]() ENUM 数据类型的限制以下是 MySQL 中 ENUM 数据类型的缺点 1. 如果我们想修改枚举值/成员,可以通过 ALTER TABLE 命令重建整个表来完成。这会消耗大量资源和时间。 2. 我们不能在枚举成员中使用表达式。例如,此 CREATE 语句无法执行,因为它在创建枚举成员时使用了 CONCAT() 函数。 3. 我们不能使用用户变量作为枚举成员。下面示例中可以看到 4. 建议我们不要将数字作为枚举成员。 5. 获取完整的枚举列表信息很复杂,因为我们需要访问 information_schema 数据库。 6. 在将 ENUM 移植到其他 RDBMS 时可能会遇到问题,因为许多数据库不支持此数据类型。 7. 我们无法向枚举列表添加更多属性。 下一个主题MySQL set |
我们请求您订阅我们的新闻通讯以获取最新更新。