MySQL에서 001부터 시작하는 자동 증가 ID 만들기
사용자 ID를 001, 002처럼 앞자리가 0으로 채워진 형태로 표시하고 싶다면 ZEROFILL 옵션을 활용하면 됩니다. ZEROFILL은 지정한 표시 폭(display width)보다 숫자가 짧을 때 왼쪽을 0으로 채워 출력해 주는 MySQL의 속성입니다.
먼저 ALTER TABLE 문으로 기존 컬럼을 다음과 같이 변경합니다.
alter table yourTableName
change yourColumnName yourColumnName int(3) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT PRIMARY KEY;
위 구문의 의미는 다음과 같습니다.
- int(3): 숫자를 3자리 폭으로 표시
- UNSIGNED: 음수를 허용하지 않아 저장 범위를 양수 쪽으로 넓힘
- ZEROFILL: 3자리에 맞춰 왼쪽을 0으로 채움 (예: 1 → 001)
- AUTO_INCREMENT PRIMARY KEY: 자동 증가 기본 키로 설정
1단계: 예제 테이블 생성
먼저 실습용 테이블을 생성해 보겠습니다.
mysql> create table DemoTable1958
(
UserId int,
UserName varchar(20)
);
Query OK, 0 rows affected (0.00 sec)
2단계: 컬럼을 ZEROFILL 자동 증가로 변경
이제 UserId 컬럼을 001부터 시작하는 시퀀스 번호로 표시되도록 변경합니다.
mysql> alter table DemoTable1958
change UserId UserId int(3) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT PRIMARY KEY;
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
3단계: 테이블 구조 확인
DESC 명령으로 변경된 테이블 구조를 확인할 수 있습니다.
mysql> desc DemoTable1958;
실행 결과는 다음과 같습니다.
+----------+--------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------------------+------+-----+---------+----------------+
| UserId | int(3) unsigned zerofill | NO | PRI | NULL | auto_increment |
| UserName | varchar(20) | YES | | NULL | |
+----------+--------------------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
UserId 컬럼에 auto_increment와 zerofill 속성이 정상적으로 적용된 것을 확인할 수 있습니다.
4단계: 데이터 삽입
INSERT 명령으로 레코드를 추가해 보겠습니다. UserId는 자동으로 증가하므로 UserName 값만 넣으면 됩니다.
mysql> insert into DemoTable1958(UserName) values('Chris');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1958(UserName) values('David');
Query OK, 1 row affected (0.00 sec)5단계: 결과 확인
SELECT 문으로 전체 레코드를 조회합니다.
mysql> select * from DemoTable1958;
실행 결과는 다음과 같습니다.
+--------+----------+
| UserId | UserName |
+--------+----------+
| 001 | Chris |
| 002 | David |
+--------+----------+
2 rows in set (0.00 sec)
결과를 보면 UserId가 001, 002처럼 3자리 형식으로 0이 채워져 자동 증가하는 것을 확인할 수 있습니다.
참고 사항
MySQL 8.0.17 버전부터는 정수 타입의 표시 폭(int(3) 등)이 공식적으로 지원 중단(deprecated)되었습니다. 따라서 최신 버전에서는 이 방식 대신 LPAD() 함수를 사용해 조회 시점에 0을 채우는 방법도 고려할 수 있습니다.
SELECT LPAD(UserId, 3, '0') AS UserId, UserName FROM DemoTable1958;
또한 ZEROFILL은 화면에 보이는 형식일 뿐, 실제 저장되는 값은 일반 정수라는 점도 기억해 두면 좋습니다.