Everyday Dev System

MySQL last_insert_id 본문

취업 후 공부

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 값으로 인식하여 처리합니다.