Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

각 MySQL 열거에 인덱스 값이 있음을 표시하는 방법은 무엇입니까?

<시간/>

실제로 ENUM 열 사양에 나열된 요소에는 1로 시작하는 인덱스 번호가 할당됩니다. 여기서 "인덱스"라는 용어는 열거형 값 목록 내의 위치를 ​​가리키며 테이블 인덱스와 관련이 없습니다. 다음 예제의 도움으로 우리는 각 MySQL 열거형이 인덱스 값을 가지고 있음을 보여줄 수 있습니다 -

열거값 대신 색인 번호 삽입

값을 쓰는 대신 인덱스 번호를 사용하여 ENUM 열에 값을 삽입할 수 있습니다. 예를 들어 아래 표에는 'pass'와 'fail'이라는 두 개의 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)

위의 쿼리에서 우리는 열거형 값에 각각 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 삽입

ENUM 컬럼에 NOT NULL을 지정하지 않기 때문에 열거 값 위치에 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)