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

MySQL 데이터 유형 int 대 enum?

<시간/>

일부 값만 필요하다는 것을 이미 알고 있다면 가장 좋은 솔루션은 ENUM 데이터 유형을 사용하는 것입니다. ENUM은 더 제한적입니다.

값에 대해 모르는 경우 TINYINT UNSIGNED 데이터 유형을 사용해야 합니다. TINYINT UNSIGNED는 덜 제한적입니다.

10,20,30만 저장하려는 경우 ENUM 데이터 유형을 구현해 보겠습니다. 다음은 쿼리입니다 -

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)

삽입 명령을 사용하여 테이블에 일부 레코드 삽입 -

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

select 문을 사용하여 테이블의 모든 레코드 표시 -

mysql> select *from DemoTable;

이것은 다음과 같은 출력을 생성합니다 -

+----+--------+
| Id | Number |
+----+--------+
|  1 | 10     |
|  2 | 20     |
|  3 | 30     |
+----+--------+
3 rows in set (0.00 sec)

다음은 TINYINT UNSIGNED의 구현입니다. 새 테이블을 만들어 봅시다 -

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

삽입 명령을 사용하여 테이블에 일부 레코드 삽입 -

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)

select 문을 사용하여 테이블의 모든 레코드 표시 -

mysql> select *from DemoTable;

이것은 다음과 같은 출력을 생성합니다 -

+----+--------+
| Id | Number |
+----+--------+
|  1 |    100 |
|  2 |     50 |
|  3 |     60 |
|  4 |     70 |
+----+--------+
4 rows in set (0.00 sec)