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

MySQL에서 SERIAL과 AUTO_INCREMENT의 차이점 완벽 정리

MySQL에서 SERIALAUTO_INCREMENT는 모두 필드의 기본값으로 순차적인 번호(시퀀스)를 자동 생성하는 데 사용되는 기능입니다. 하지만 두 기능은 내부 동작 방식과 문법적 성격에서 중요한 차이점을 가지고 있습니다.

AUTO_INCREMENT란?

AUTO_INCREMENT 속성은 BITDECIMAL을 제외한 모든 숫자 데이터 타입에서 사용할 수 있습니다. 한 테이블에는 오직 하나의 AUTO_INCREMENT 필드만 존재할 수 있으며, 한 테이블에서 생성된 시퀀스 값을 다른 테이블에서 재사용할 수 없습니다.

또한 이 속성은 시퀀스에 중복된 값이 발생하지 않도록 해당 필드에 UNIQUE 인덱스가 반드시 설정되어 있어야 합니다. 시퀀스는 기본적으로 1부터 시작하며, 레코드가 삽입될 때마다 1씩 증가합니다.

예제

mysql> Create Table Student(Student_id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, Name Varchar(20));
Query OK, 0 rows affected (0.18 sec)

위 쿼리는 Student_id 컬럼을 AUTO_INCREMENT로 선언했습니다.

mysql> Insert Into Student(Name) values('RAM'),('SHYAM');
Query OK, 2 rows affected (0.06 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> Select * from Student;
+------------+-------+
| Student_id | Name  |
+------------+-------+
|          1 | RAM   |
|          2 | SHYAM |
+------------+-------+
2 rows in set (0.00 sec)

mysql> Show Create Table Student\G
*************************** 1. row ***************************
       Table: Student
Create Table: CREATE TABLE `student` (
    `Student_id` int(11) NOT NULL AUTO_INCREMENT,
    `Name` varchar(20) DEFAULT NULL,
    PRIMARY KEY (`Student_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

SERIAL(DEFAULT VALUE)란?

반면 SERIAL DEFAULT VALUENOT NULL AUTO_INCREMENT UNIQUE KEY를 축약하여 표현하는 문법입니다. 즉, SERIAL을 사용하면 NOT NULL 제약 조건, AUTO_INCREMENT 속성, 그리고 UNIQUE 키가 한 번에 자동으로 적용됩니다. TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT 같은 정수 계열 데이터 타입에서 SERIAL DEFAULT VALUE 키워드를 지원합니다.

예제

mysql> Create Table Student_serial(Student_id SERIAL, Name VArchar(20));
Query OK, 0 rows affected (0.17 sec)

mysql> Insert into Student_serial(Name) values('RAM'),('SHYAM');
Query OK, 2 rows affected (0.12 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> Select * from Student_serial;
+------------+-------+
| Student_id | Name  |
+------------+-------+
|          1 | RAM   |
|          2 | SHYAM |
+------------+-------+
2 rows in set (0.00 sec)

mysql> Show Create Table Student_serial\G
*************************** 1. row ***************************
       Table: Student_serial
Create Table: CREATE TABLE `student_serial` (
    `Student_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
    `Name` varchar(20) DEFAULT NULL,
    UNIQUE KEY `Student_id` (`Student_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

두 기능의 핵심 차이점 비교

  • 데이터 타입: AUTO_INCREMENT는 BIT와 DECIMAL을 제외한 모든 숫자 타입에 적용할 수 있는 반면, SERIAL은 내부적으로 BIGINT UNSIGNED로 고정됩니다.
  • 문법 성격: SERIAL은 NOT NULL, AUTO_INCREMENT, UNIQUE 키가 결합된 축약형(shorthand) 표현입니다.
  • UNIQUE 인덱스: AUTO_INCREMENT만 사용할 경우 개발자가 직접 PRIMARY KEY 또는 UNIQUE 인덱스를 지정해야 하지만, SERIAL은 UNIQUE 키가 자동으로 생성됩니다.

정리하면, 컬럼의 데이터 타입을 세밀하게 제어하고 싶다면 AUTO_INCREMENT를 직접 사용하고, 간편하게 고유한 자동 증가 키를 만들고 싶다면 SERIAL을 사용하는 것이 좋습니다.