mysql 의 auto_increment 특징 과 주의점들을 알아보자
# AUTO_INCREMENT의 특징, 최대 값
1) 자동 증가: 새로운 레코드가 삽입시 자동으로 고유한 숫자를 생성. 주로 기본 키로 사용, 각 행의 고유성을 보장
2) 초기값 및 증가값 설정 가능: 기본적으로 1부터 시작하며, 각 행이 추가될 때마다 1씩 증가.
3) 데이터 타입 제한: 주로 INT 타입으로 설정, 데이터 타입에 따라 최대값이 제한됩니다. 예를 들어, INT의 최대값은 약 21억입니다
4) 연속성: 삭제된 행의 ID는 재사용되지 않고 건너뛴다.
* mysql 에서 innodb 를 엔진으로 사용할때 auto_increment 컬럼을 pk 사용하는 것이 적절한가?
innodb 사용시 pk 의 선정
# 타입 별 최대 값
데이터 타입 |
SIGNED 범위 |
UNSIGNED 범위 |
TINYINT |
-128 to 127 |
0 to 255 |
SMALLINT |
-32,768 to 32,767 |
0 to 65,535 |
MEDIUMINT |
-8,388,608 to 8,388,607 |
0 to 16,777,215 |
INT |
-2,147,483,648 to 2,147,483,647 |
0 to 4,294,967,295 (42억) |
BIGINT |
-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 |
0 to 18,446,744,073,709,551,615 (1800경, 18.44 엑사(E)) |
# 현재 값 확인하기
방법 1) SHOW TABLE STATUS
SHOW TABLE STATUS WHERE Name = '테이블명';
테이블의 상태 정보를 반환하며, 다음 AUTO_INCREMENT 값을 포함하여 테이블의 엔진, 행 수, 평균 행 길이 다양한 메타데이터를 제공
방법 2) INFORMATION_SCHEMA.TABLES
SELECT AUTO_INCREMENT
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = '데이터베이스명'
AND TABLE_NAME = '테이블명'
;
INFORMATION_SCHEMA.TABLES 뷰를 통해 특정 데이터베이스와 테이블에 대한 정보를 쿼리
방법 3) SELECT MAX()
SELECT MAX(컬럼명) + 1 AS next_auto_increment FROM 테이블명;
현재 존재하는 최대 값을 기반으로 다음 AUTO_INCREMENT 값을 추정
데이터가 삭제되거나 수동으로 삽입된 경우 정확하지 않을 수 있다.
* 이전 버전에서는 auto_increment 값을 메모리에서 관리했지만(서버 재시작시 초기화), 8.0부터는 디스크에 저장하여 영속성을 보장한다.