logo

MySQL ENUM

MySQL의 ENUM 데이터 유형은 문자열 객체 . 이를 통해 테이블 ​​생성 시 열 사양의 허용된 값 목록에서 선택한 값을 제한할 수 있습니다. 그것은 짧다 열거 , 이는 각 열이 지정된 가능한 값 중 하나를 가질 수 있음을 의미합니다. 그것은 사용한다 숫자 인덱스 (1, 2, 3…)은 문자열 값을 나타냅니다.

MySQL ENUM 데이터 유형에는 다음과 같은 장점이 있습니다.

  • 열에 지정된 가능한 값의 제한된 집합이 있을 수 있는 컴팩트 데이터 저장소입니다. 여기서 문자열 값은 자동으로 숫자 인덱스로 사용됩니다.
  • 숫자를 해당 문자열로 다시 변환할 수 있으므로 읽기 가능한 쿼리 및 출력이 가능합니다.
  • 정수, 부동 소수점, 소수 및 문자열과 같은 다양한 데이터 유형을 허용할 수 있습니다.

통사론

다음은 열에서 ENUM 데이터 유형을 정의하는 데 사용되는 구문입니다.

 CREATE TABLE table_name ( Column1, Column2 ENUM ('value_1','value_2','value_3'), Column3… ); 

위 구문에서는 ENUM 값을 3개만 정의했지만 필요에 따라 늘릴 수 있습니다. 여기서는 열거형 값이 항상 인용된 문자열 리터럴 .

MySQL을 사용하면 다음 속성을 사용하여 ENUM 데이터 유형을 정의할 수 있습니다.

NULL이 아님: 기본적으로 ENUM 데이터 유형은 NULL입니다. NULL 값을 허용하지 않으려면 ENUM 컬럼을 지정할 때 NOT NULL 속성을 사용해야 합니다.

자바 이런 개념

없는: DEFAULT NULL과 동의어이며 해당 인덱스 값은 항상 NULL이다.

기본: 컬럼에 값이 지정되지 않은 경우 ENUM 데이터 유형은 기본값을 삽입합니다. 즉, INSERT 문이 이 열에 값을 제공하지 않으면 기본값이 삽입됩니다. DEFAULT 표현식은 함수 삽입을 허용하지 않습니다. My SQL의 ENUM 데이터 유형에는 DEFAULT 값이 NULL 또는 빈 문자열('')로 포함됩니다.

MySQL ENUM 예

다음 그림을 통해 ENUM 데이터 유형이 MySQL에서 어떻게 작동하는지 이해해 봅시다. 여기서는 '라는 이름의 테이블을 생성하겠습니다. 셔츠 '에는 id, name, size라는 세 개의 열이 포함되어 있습니다.

크기 열은 ENUM 데이터 유형을 사용하며 소형, 중형, 대형 및 x-대형 크기를 갖습니다. MySQL은 이러한 열거형 멤버를 각각 소형=1, 중형=2, 대형=3, x-대형=4인 숫자 인덱스에 매핑합니다. 다음 쿼리를 실행하여 테이블을 생성합니다.

 CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', 'medium', 'large', 'x-large') ); 

다음으로 우리는 끼워 넣다 테이블에 값을 입력합니다. 삽입하는 동안 열거형 값은 문자열 리터럴이나 숫자 인덱스로 삽입될 수 있으며 둘 다 동일합니다. 다음 문을 실행하여 테이블에 값을 삽입합니다.

 INSERT INTO shirts(id, name, size) VALUES (1,'t-shirt', 'medium'), (2, 'casual-shirt', 3), (3, 'formal-shirt', 4), (4, 'polo-shirt', 'small'); 

이제 SELECT 문을 실행하여 테이블에 삽입된 값을 확인합니다.

RDBMS
 mysql> SELECT * FROM shirts; 

다음 이미지에는 문자열 리터럴의 열거형 값만 포함하는 위 쿼리 결과가 모두 포함되어 있습니다.

MySQL ENUM

ENUM 정렬

MySQL은 열 사양에 데이터를 삽입한 순서에 따라 숫자 인덱스를 기반으로 열거형 값을 정렬합니다. 예를 들어 , 열거형을 ENUM('b', 'a', '', 'c')으로 정의한 경우. 그런 다음 b는 a 앞에 오고, 빈 문자열은 c(비어 있지 않은 문자열) 앞에 오고, NULL 값은 다른 값 앞에 옵니다.

따라서 ORDER BY 절을 사용하여 ENUM 데이터 형식에서 예상치 못한 결과를 얻고 싶지 않으면 다음 규칙을 따르십시오.

  • 열거형 값을 알파벳 순서로 정의합니다.
  • 컬럼 이름이 인덱스 번호가 아닌 어휘 순서로 되어 있는지 확인하는 것입니다.

다음 예에서는 열거형 정렬을 보다 명확하게 설명합니다. 따라서 특정 순서로 셔츠의 크기를 얻으려면 아래 명령문을 실행하십시오.

 mysql> SELECT * FROM shirts ORDER BY size DESC; 

이 쿼리는 아래와 같이 셔츠 크기가 내림차순으로 표시되는 출력을 제공합니다.

MySQL ENUM

ENUM 데이터 유형의 제한 사항

MySQL에서 ENUM 데이터 유형의 단점은 다음과 같습니다.

1. 열거 값/멤버를 수정하려면 ALTER TABLE 명령을 사용하여 전체 테이블을 다시 작성하면 됩니다. 이는 우리의 자원과 시간을 값비싼 비용으로 사용하게 만듭니다.

2. 열거형 멤버에는 표현식을 사용할 수 없습니다. 예를 들어, 이 CREATE 문은 열거형 멤버를 생성하기 위해 CONCAT() 함수를 사용하기 때문에 실행되지 않습니다.

 CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', CONCAT('med','ium'), 'large', 'x-large') ); 

3. 사용자 변수를 열거형 멤버로 사용할 수 없습니다. 아래 예에서 볼 수 있습니다.

자바 케이스 진술
 SET @mysize = 'large'; CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', 'medium', @mysize, 'x-large') ); 

4. 숫자 값을 열거형 멤버로 사용하지 않는 것이 좋습니다.

5. information_schema 데이터베이스에 액세스해야 하기 때문에 완전한 정보 열거 목록을 얻는 것은 복잡합니다.

6. 많은 데이터베이스가 이 데이터 유형을 지원하지 않기 때문에 ENUM을 다른 RDBMS로 포팅하는 동안 문제가 발생할 수 있습니다.

7. 열거 목록에 더 많은 속성을 추가할 수 없습니다.