취업 후 공부
MySQL last_insert_id
chaeyoung-
2025. 12. 1. 18:04
last_iinsert_id는 서버에서 DB와 연결된 커넥션 단위로 select 합니다.
서버에서 DB와 연결을 할때 커넥션 풀에서 가져와 연결을 하고 그 연결마다 캐시를 다르게 저장하고 있습니다.
이때, insert 와 select 문의 요청이 각각 나눠져 있을 경우 문제가 발생합니다.
service 단에서
insertTable()를 호출한 후에,
selectLastId()를 호출할 경우
insert 할때 Auto increment 된 값을 select 해온다는 보장이 없습니다.
왜냐하면, insert 할때와 select 할때의 커넥션이 다를 경우가 있기 때문입니다.
<insert id="insertAndGetId" parameterType="YourObject">
<selectKey keyProperty="id" resultType="long" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO your_table (
name,
description
) VALUES (
#{name},
#{description}
)
</insert>
위와 같이 XML에서 insert를 한 후에 select 할 수 있도록 xml 코드 변경이 필요합니다.
또한 selectkey 에서 order 값을 명시하지 않으면 default로 AFTER 값으로 인식하여 처리합니다.