首頁 >資料庫 >mysql教程 >如何顯示每個MySQL枚舉都有一個索引值?

如何顯示每個MySQL枚舉都有一個索引值?

王林
王林轉載
2023-08-28 09:01:02738瀏覽

如何顯示每個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枚舉都有一個索引值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除