如何显示每个 MySQL 枚举都有一个索引值?
mysqlmysqli database
实际上,ENUM 列规范中列出的元素被分配了以 1 开头的索引号。此处术语"索引"表示枚举值列表中的位置,它们与表索引无关。借助以下示例,我们可以显示每个 MySQL 枚举都有一个索引值"减"
通过插入索引号而不是枚举值
我们可以借助索引号在 ENUM 列中插入值,而不是写入值。例如,在下面的表中,我们有两个 ENUM 值"通过"和"失败"。由于"通过"在枚举列表中写在最前面,因此索引号为"1",而"失败"则为"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)
在上述查询中,我们分别对枚举值 pass 和 fail 使用了索引号 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) 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 impacted (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)