如何显示每个MySQL枚举的索引值?
实际上,枚举列规范中列出的元素被分配以从1开始的索引编号。这里的术语“索引”指的是在枚举值列表中的位置,它们与表索引无关。我们可以通过以下示例来显示每个MySQL枚举的索引值−
阅读更多:MySQL 教程
通过插入枚举值的索引数字
我们可以通过其索引号而不是写入值来插入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分别表示枚举值通过和失败。
通过插入空字符串而非枚举值
空字符串的索引值为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)
从上面的查询输出中,可以清楚地看出空字符串的索引值为0。
通过插入NULL而非枚举值
我们可以在枚举值的位置插入NULL,因为我们没有在ENUM列中指定NOT NULL。NULL的索引值为NULL。例如,使用以下查询,在结果表的枚举列中插入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)
上述查询在枚举值的位置插入了空值,可以使用下面的查询进行检查 –
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)
极客教程