본문 바로가기
DBMS

[MySQL] AUTO_INCREMENT 자동증가 값 가져오기

by yun5o 2021. 10. 6.

AUTO_INCREMENT는 데이터를 INSERT 할 때마다 값을 1씩 증가시켜 줍니다.

보통 테이블을 생성 할 때, primary key 중복을 막기 위해 AUTO_INCREMENT 설정해놓습니다.

오라클의 경우, nextval 함수를 이용하여 시퀀스를 생성할 수 있습니다.

 

 

테이블 생성 할 때, CREATE문에서  AUTO_INCREMENT를 설정해주면 사용 가능합니다.

AUTO_INCREMENT=1로 설정하면 1부터 자동 증가됩니다.

 

※주의할 점※

InnoDB 엔진을 사용하는 경우 서버 재시작을 하게 되면 AUTO_INCREMENT 값이 초기화가 돼서 주의해야합니다.

MyISAM (파일 기반 스토리지 엔진)

- 디스크에 갱신

- 서버 재시작 해도 기존 AUTO_INCREMENT 값 유지 됨

InnoDB (메모리 기반 스토리지 엔진)

- 메모리에 갱신

- 서버 재시작 하면 AUTO_INCREMENT 값 1로 초기화 됨

 


 

INSERT 문 실행 후에 자동 증가된 no 값을 가져와야한다면 아래 두가지 방법을 사용할 수 있습니다.

 

1. SELECT MAX(no)+1 FROM new_table;

- 현재 no의 최댓값을 조회하여 +1 증가시켜주는 쿼리를 사용

- 동시에 INSERT문 날리고 쿼리 조회 시점이 같을 경우에는 중복된 값을 조회할 수도 있음

 

2. SELECT LAST_INSERT_ID();

- MYSQL에서 지원하는 LAST_INSERT_ID 함수를 사용

- 1개의 INSERT 쿼리에 대해서 마지막 AUTO_INCREMENT 값이다.

예를 들어, INSERT문 3개를 입력하여 3건을 저장했을 때 AUTO_INCREMENT = 3 이 나오지만, 

다중 INSERT문 1개를 입력하여 3건을 저장했을땐 AUTO_INCREMENT = 1 이 됩니다.

 

대용량 처리 시 MAX() 함수 사용 시 PK값 중복이 날 수 있으니, 되도록 LAST_INSERT_ID()를 사용하는 것이 좋습니다.

 


MyBatis에서 INSERT 후에 PK값을 바로 조회해 오려면 selectKey를 선언하여 사용해야 합니다.

max() 함수 사용
LAST_INSERT_ID() 함수 사용

keyProperty : 리턴받을 변수 명

resultType : 리턴받을 변수 타입

order : 실행 순서

 

[추가]

찾아보니 MyBatis 에서 insert한 pk값을 가져오는 옵션이 있습니다.

useGeneratedKeys, keyProperty 옵션을 사용해 자동생성된 컬럼의 값을 parameter에 넣어줍니다.

- useGeneratedKeys : 자동 생성 된 key 사용여부 (default : false)

- keyProperty : 리턴 될 keyProperty 컬럼

댓글