Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
Tags
- START WITH
- HTML
- 키보드
- 프로세스
- integer
- API
- 스레드 덤프
- 컨트롤러
- MySQL
- letterspacing
- 티스토리챌린지
- wsdl
- oracle
- 스레드
- Docker
- 톰캣
- Database
- 영상편집
- equals
- ibatis
- MariaDB
- 삼성증권
- Tomcat
- 오블완
- 안드로이드 스튜디오
- http
- cmd
- JDBC
- java
- Linux
Archives
- Today
- Total
블로그 이름
[MariaDB] last_insert_id() 사용 시 주의점 본문
auto_increment와 last_insert_id() 사용 시 주의점
auto_increment란 DB 테이블 컬럼에 자동으로 증가하는 값이다.
last_insert_id()는 테이블의 마지막 auto_increment 값을 리턴한다.
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`test` VARCHAR(10) DEFAULT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO test(col) VALUES('a'),('b'),('c');
SELECT last_insert_id();
위 순서대로 쿼리 실행 시 last_insert_id는 3일 것으로 예상 하였으나 1이 반환됨.
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`test` VARCHAR(10) DEFAULT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO test(col) VALUES('a')
INSERT INTO test(col) VALUES('b')
INSERT INTO test(col) VALUES('c')
SELECT last_insert_id();
위 순서대로 쿼리 실행 시 last_insert_id는 3으로 반환된다.
insert 되는 데이터는 같은데 last_insert_id는 차이가 난다. last_insert_id 함수는 1개 insert에 대해 성공 시 마지막 auto_increment 값을 반환한다. 위 insert는 1개이므로 반환값이 1, 아래는 3번 했으므로 3.
그리고 INSERT 3번 진행 후, last_inserjt_id가 3인 상황에서 트랜잭션 사용하여 ROLLBACK 동작 후, INSERT 시 LAST_INSERT_ID는 1이 아니라 4가 된다. 트랜잭션은 롤백되었지만 INSERT 자체는 정상적으로 수행되었고, 이로 인해 auto_increment 값은 증가하여 LAST_INSERT_ID()는 4가 된다.
트랜잭션을 사용하여 LAST_INSERT_ID() 의 반환값은 INSERT 수만큼 정상적으로 나오는데, DB에 데이터가 없는 현상이 있어 ORACLE DB에서는 문제없이 동작하는 쿼리가 MARIADB에서만 안되는게 이상하여 LAST_INSERT_ID()가 문제인가 하고 살펴보았다.
'개발 > Database' 카테고리의 다른 글
| [MariaDB] ORACLE의 START WITH 절 MariaDB에서 사용하기 (0) | 2025.09.01 |
|---|---|
| [DB] Java Ibatis에서 ORACLE과 MARIADB 트랜잭션 사용 시 차이 (0) | 2025.05.29 |
| [MariaDB] ORACLE의 STARTWITH절을 MariaDB에서 사용 (0) | 2025.04.28 |
| [ORACLE] 계층형 쿼리 사용법 (0) | 2025.04.28 |
| [ORACLE] Base64 인코딩/디코딩 내장함수 사용법 (0) | 2025.03.19 |