logo图片
MySql教程
MySql用户管理
MySQL数据库
MySql表格和视图
MySQL查询
MySQL索引
MySQL子句
MySQL授权
MySql控制流
MySQL条件
MySQL连接
MySQL键
MySQL触发器
MySQL聚合函数
MySQL常用
MySQL正则表达式
MySql差异性

MySQL ENUM

MySQL中的ENUM数据类型是 字符串对象。它允许我们在创建表时限制从列规范中的允许值列表中选择的值。 枚举的缩写,表示每一列可能具有指定的可能值之一。它使用 数字索引(1、2、3…)表示字符串值。
MySQL ENUM数据类型具有以下优点:
紧凑的数据存储,其中该列可能具有一组有限的指定可能值。此处,字符串值自动用作数字索引。 它允许可读的查询和输出,因为数字可以再次转换为相应的字符串。 它可以接受许多数据类型,例如整数,浮点数,十进制和字符串。

语法

以下是用于在列中定义ENUM数据类型的语法:
CREATE TABLE table_name (
    Column1,
    Column2 ENUM ('value_1','value_2','value_3'),
    Column3…
);
在以上语法中,我们仅定义了三个ENUM值,但可以根据需要将其增加。在这里,我们必须确保枚举值应始终保持在 带引号的字符串文字之内。
MySQL允许我们使用以下属性定义ENUM数据类型:
不为空: 默认情况下,ENUM数据类型为NULL。如果我们不想允许NULL值,则在指定ENUM列时需要使用NOT NULL属性。
NULL: : 它是DEFAULT NULL的同义词,
默认值: : 如果在列中未指定值,则ENUM数据类型将插入默认值。换句话说,如果INSERT语句没有为该列提供值,则将插入默认值。 DEFAULT表达式不允许插入函数。 My SQL中的ENUM数据类型包括默认值NULL或空字符串('')。

MySQL ENUM示例

让我们了解ENUM数据类型的方式可以通过以下插图在MySQL中工作。在这里,我们将创建一个名为" 衬衫"的表,该表包含三列: id,名称和大小。
size列使用ENUM数据类型,并且具有较小的,中,大和x大尺寸。 MySQL将这些枚举成员映射到一个数字索引,其中small = 1,medium = 2,large = 3和x-large = 4、执行以下查询以创建表:
CREATE TABLE shirts (
    id int PRIMARY KEY AUTO_INCREMENT, 
    name VARCHAR(35), 
    size ENUM('small', 'medium', 'large', 'x-large')
);
接下来,我们需要将值 插入到表中。在插入过程中,枚举值可以作为字符串文字或其数字索引插入,并且两者相同。执行以下语句,将值插入表中:
INSERT INTO shirts(id, name, size) 
VALUES (1,'t-shirt', 'medium'), 
(2, 'casual-shirt', 3), 
(3, 'formal-shirt', 4), 
(4, 'polo-shirt', 'small');
现在,执行 SELECT语句,以查看表中插入的值:
mysql> SELECT * FROM shirts;
下面的图像包含以上所有查询结果,这些查询结果仅包含字符串文字中的枚举值:
MySQL ENUM

ENUM排序

MySQL根据其数值索引对枚举值进行排序,这些数值索引取决于我们在列规范中插入数据的顺序。 例如,如果我们已将枚举定义为ENUM("b"," a","''," c")。然后,b在a之前,空字符串在c(非空字符串)之前,而NULL值在其他值之前。
因此,如果我们不想使用ENUM数据类型获得意外结果,使用 ORDER BY子句,请遵循以下规则:
按字母顺序定义枚举值。 要确保列名按词法顺序而不是索引号。
以下示例更清楚地说明了枚举排序。因此,如果要按特定顺序获取衬衫的尺寸,请执行以下语句:
mysql> SELECT * FROM shirts ORDER BY  size DESC;
此查询将给出以下输出,在其中我们可以看到衬衫的大小按降序排列:
 MySQL ENUM

ENUM数据类型的局限性

以下是MySQL中ENUM数据类型的缺点:
1、如果要修改枚举值/成员,可以使用ALTER TABLE命令重建整个表来完成。
2、它也浪费了我们的资源和时间。我们不能将表达式与枚举成员一起使用。例如,此CREATE语句不执行,因为它使用CONCAT()函数创建枚举成员。
CREATE TABLE shirts (
    id int PRIMARY KEY AUTO_INCREMENT, 
    name VARCHAR(35), 
    size ENUM('small', CONCAT('med','ium'), 'large', 'x-large')
);
3、我们不能将用户变量用作枚举成员。在下面的示例中可以看到:
SET @mysize = 'large';
CREATE TABLE shirts (
    id int PRIMARY KEY AUTO_INCREMENT, 
    name VARCHAR(35), 
    size ENUM('small', 'medium', @mysize, 'x-large')
);
4、建议不要将数值用作枚举成员。
5、获取完整的信息枚举列表很复杂,因为我们需要访问information_schema数据库。
6、在将ENUM移植到其他RDBMS期间,我们可能会遇到问题,因为许多数据库不支持此数据类型。
7、我们不能在枚举列表中添加更多属性。

昵称: 邮箱:
Copyright © 2020 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4