Computer >> Máy Tính >  >> Lập trình >> MySQL

Làm thế nào để hiển thị rằng mỗi kiểu liệt kê MySQL có một giá trị chỉ mục?

Trên thực tế, các phần tử được liệt kê trong đặc tả cột ENUM được chỉ định số chỉ mục bắt đầu bằng 1. Ở đây, thuật ngữ "chỉ mục" chỉ ra vị trí trong danh sách các giá trị liệt kê và chúng không liên quan đến chỉ mục bảng. Với sự trợ giúp của các ví dụ sau, chúng tôi có thể chỉ ra rằng mỗi kiểu liệt kê MySQL có một giá trị chỉ mục -

Bằng cách chèn số chỉ mục thay vì giá trị liệt kê

Chúng ta có thể chèn các giá trị trong cột ENUM với sự trợ giúp của số chỉ mục của chúng thay vì viết các giá trị. Ví dụ, trong bảng dưới đây chúng ta có hai giá trị ENUM là ‘đạt’ và ‘không đạt’. Vì "pass" được viết đầu tiên trong danh sách liệt kê nên có số chỉ mục là "1" và nó sẽ là "2 cho" fail ". Bây giờ chúng ta cũng có thể chèn các giá trị bằng cách chèn các số chỉ mục như sau -

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)

Trong các truy vấn ở trên, chúng tôi đã sử dụng số chỉ mục 1 và 2 cho các giá trị liệt kê lần lượt đạt và không đạt.

Bằng cách chèn chuỗi trống thay vì giá trị liệt kê

Giá trị chỉ mục của chuỗi trống là 0. Trước khi chèn chuỗi trống, chế độ SQL không được TRADITIONAL, STRICT_TRANS_TABLES hoặc STRICT_ALL_TABLES. Với sự trợ giúp của ví dụ sau, chúng ta có thể hiểu nó -

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)

Truy vấn trên sẽ chèn chuỗi trống vào vị trí của một giá trị liệt kê. MySQL chèn chuỗi trống với cảnh báo sau.

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

Bây giờ khi chúng ta kiểm tra bảng, chúng ta có thể thấy một chuỗi trống trong trường 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.

Bằng cách chèn NULL thay vì giá trị liệt kê

Chúng ta có thể chèn NULL vào vị trí của các giá trị liệt kê vì chúng ta Không chỉ định NOT NULL với cột ENUM. Giá trị chỉ mục của NULL là NULL. Ví dụ:với sự trợ giúp của truy vấn sau, chúng tôi chèn NULL vào cột liệt kê của bảng 'kết quả' và có thể kiểm tra giá trị chỉ mục của nó.

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)

Truy vấn ở trên chèn giá trị NULL vào vị trí của giá trị liệt kê có thể được kiểm tra bằng truy vấn trợ giúp bên dưới -

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

Bây giờ, với sự trợ giúp của truy vấn tiếp theo, chúng ta có thể thấy rằng giá trị chỉ mục của NULL là NULL.

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