如何显示每个MySQL枚举都有一个索引值?

2023年 8月 28日 56.8k 0

如何显示每个MySQL枚举都有一个索引值?

实际上,在ENUM列规范中列出的元素被分配了从1开始的索引号。这里的术语“索引”指的是在枚举值列表中的位置,它们与表索引无关。通过以下示例,我们可以展示每个MySQL枚举都有一个索引值-

我们可以通过插入它们的索引号而不是写入值来在ENUM列中插入值。例如,在下面的表中,我们有两个ENUM值'pass'和'fail'。由于'pass'在枚举列表中首先被写入,因此得到索引号'1','fail'的索引号为'2'。现在,我们也可以通过插入索引号来插入值,如下所示-

mysql> Insert into marks(id,name,result)values(103,'Daksh','1');
Query OK, 1 row affected (0.06 sec)

mysql> Insert into marks(id,name,result)values(104,'Shayra','2');
Query OK, 1 row affected (0.07 sec)

mysql> Select * from marks;
+-----+---------+--------+
| id | Name | Result |
+-----+---------+--------+
| 101 | Aarav | Pass |
| 102 | Yashraj | Fail |
| 103 | Daksh | Pass |
| 104 | Shayra | Fail |
+-----+---------+--------+
4 rows in set (0.00 sec)

登录后复制

在上述查询中,我们使用索引号1和2分别表示枚举值pass和fail。

通过插入空字符串而不是枚举值

空字符串的索引值为0。在插入空字符串之前,SQL模式不能是TRADITIONAL、STRICT_TRANS_TABLES或STRICT_ALL_TABLES。通过以下示例,我们可以理解它 −

mysql> SET SESSION sql_mode = '';
Query OK, 0 rows affected (0.00 sec)

mysql> Insert into marks(id, name, result) values(105,'Yashraj','');
Query OK, 1 row affected, 1 warning (0.06 sec)

登录后复制

上面的查询将在枚举值的位置插入空字符串。 MySQL 插入空字符串并出现以下警告。

mysql> Show warnings;
+---------+------+---------------------------------------------+
| Level | Code | Message |
+---------+------+---------------------------------------------+
| Warning | 1265 | Data truncated for column 'Result' at row 1 |
+---------+------+---------------------------------------------+
1 row in set (0.00 sec)

登录后复制

现在当我们检查表格时,可以看到在ENUM字段中有一个空字符串。

mysql> Select * from marks;
+-----+---------+--------+
| id | Name | Result |
+-----+---------+--------+
| 101 | Aarav | Pass |
| 102 | Yashraj | Fail |
| 103 | Daksh | Pass |
| 104 | Shayra | Fail |
| 105 | Yash | |
+-----+---------+--------+
5 rows in set (0.00 sec)

mysql> Select result+0 As result_index from marks;
+--------------+
| result_index |
+--------------+
| 1 |
| 2 |
| 1 |
| 2 |
| 0 |
+--------------+
5 rows in set (0.01 sec)
From the output of above query, it is clear that the index value of the empty string is 0.

登录后复制

通过插入 NULL 而不是枚举值

我们可以在枚举值的位置插入 NULL,因为我们不为 ENUM 列指定 NOT NULL。 NULL的索引值为NULL。例如,借助以下查询,我们在表“result”的枚举列中插入NULL,并可以检查其索引值。

mysql> Create table result(Id INT PRIMARY KEY NOT NULL, Name Varchar(10), GradeENUM('POOR','GOOD'));
Query OK, 0 rows affected (0.25 sec)

mysql> Insert into result(id, name, grade) values(100, 'Rahul', NULL);
Query OK, 1 row affected (0.06 sec)

登录后复制

上面的查询在枚举值的位置插入了 NULL 值,可以使用下面的帮助查询来检查 -

mysql> Select * from result;
+-----+-------+-------+
| Id | Name | Grade |
+-----+-------+-------+
| 100 | Rahul | NULL |
+-----+-------+-------+
1 row in set (0.00 sec)

登录后复制

现在,借助下一个查询,我们可以观察到NULL的索引值为NULL。

mysql> Select Grade+0 As Grade_index from result;
+-------------+
| Grade_index |
+-------------+
| NULL |
+-------------+
1 row in set (0.00 sec)

登录后复制

以上就是如何显示每个MySQL枚举都有一个索引值?的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论