Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 데이터 유형 선택 가이드: ENUM vs TINYINT UNSIGNED

MySQL에서 숫자 값을 저장할 때 ENUMTINYINT UNSIGNED 중 어떤 데이터 유형을 선택해야 할지 고민되는 경우가 많습니다. 두 유형의 차이를 이해하고 상황에 맞게 선택하는 것이 중요합니다.

ENUM과 TINYINT UNSIGNED의 선택 기준

저장할 값이 미리 정해져 있는 경우에는 ENUM 데이터 유형을 사용하는 것이 가장 좋습니다. ENUM은 허용된 값만 입력할 수 있도록 제한하기 때문에 더 엄격한 데이터 무결성을 보장합니다.

반면, 저장될 값이 사전에 알 수 없는 경우에는 TINYINT UNSIGNED 데이터 유형을 사용해야 합니다. TINYINT UNSIGNED는 특정 값으로 제한하지 않으므로 더 유연하게 사용할 수 있습니다.

ENUM 데이터 유형 구현 예제

10, 20, 30이라는 세 개의 값만 저장하려는 경우 ENUM을 활용하는 방법을 살펴보겠습니다.

1. 테이블 생성

mysql> create table DemoTable
   (
   Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
   Number ENUM('10','20','30')
   );
Query OK, 0 rows affected (0.24 sec)

2. 레코드 삽입

mysql> insert into DemoTable(Number) values('10');
Query OK, 1 row affected (0.07 sec)

mysql> insert into DemoTable(Number) values('20');
Query OK, 1 row affected (0.06 sec)

mysql> insert into DemoTable(Number) values('30');
Query OK, 1 row affected (0.06 sec)

mysql> insert into DemoTable(Number) values('50');
ERROR 1265 (01000): Data truncated for column 'Number' at row 1

위 예시에서 볼 수 있듯이, ENUM에 정의되지 않은 값 '50'을 삽입하려고 하면 ERROR 1265 오류가 발생하며 데이터가 거부됩니다. 이것이 ENUM이 제공하는 강력한 데이터 검증 기능입니다.

3. 결과 확인

mysql> select *from DemoTable;
+----+--------+
| Id | Number |
+----+--------+
|  1 | 10     |
|  2 | 20     |
|  3 | 30     |
+----+--------+
3 rows in set (0.00 sec)

TINYINT UNSIGNED 데이터 유형 구현 예제

이번에는 TINYINT UNSIGNED를 사용하는 방법을 살펴보겠습니다. 새로운 테이블을 생성합니다.

1. 테이블 생성

mysql> create table DemoTable
   (
   Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
   Number tinyint unsigned
   );
Query OK, 0 rows affected (0.23 sec)

2. 레코드 삽입

mysql> insert into DemoTable(Number) values(100);
Query OK, 1 row affected (0.07 sec)

mysql> insert into DemoTable(Number) values(50);
Query OK, 1 row affected (0.17 sec)

mysql> insert into DemoTable(Number) values(60);
Query OK, 1 row affected (0.06 sec)

mysql> insert into DemoTable(Number) values(70);
Query OK, 1 row affected (0.07 sec)

TINYINT UNSIGNED는 0부터 255까지의 모든 양수를 허용하므로, 어떤 값이든 오류 없이 정상적으로 삽입됩니다.

3. 결과 확인

mysql> select *from DemoTable;
+----+--------+
| Id | Number |
+----+--------+
|  1 |    100 |
|  2 |     50 |
|  3 |     60 |
|  4 |     70 |
+----+--------+
4 rows in set (0.00 sec)

정리

ENUM은 값의 범위가 명확하게 정해져 있고 잘못된 값의 입력을 원천적으로 차단하고 싶을 때 적합하며, TINYINT UNSIGNED는 값이 다양하거나 향후 변경 가능성이 있을 때 더 나은 선택입니다. 스토리지 측면에서 ENUM은 내부적으로 정수로 저장되어 효율적이지만, 값 목록을 변경하려면 ALTER TABLE 작업이 필요하다는 점도 함께 고려하면 좋습니다.