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를 선언하여 사용해야 합니다.
keyProperty : 리턴받을 변수 명
resultType : 리턴받을 변수 타입
order : 실행 순서
[추가]
찾아보니 MyBatis 에서 insert한 pk값을 가져오는 옵션이 있습니다.
useGeneratedKeys, keyProperty 옵션을 사용해 자동생성된 컬럼의 값을 parameter에 넣어줍니다.
- useGeneratedKeys : 자동 생성 된 key 사용여부 (default : false)
- keyProperty : 리턴 될 keyProperty 컬럼
댓글