Insert 후 ID를 리턴하고 싶은 경우 LAST_INSERT_ID()를 사용하면 된다.

MyBatis의 경우 selectKey 문을 이용하여 사용 가능하다.

<insert id="addUser" parameterType="User">
  INSERT INTO TB_USER VALUES ( // 생략)
  <selectKey keyProperty="id" resultType="Integer">
    SELECT LAST_INSERT_ID()
  </selectKey>
</insert>        

참고로 리턴값에 담기는게 아니라 파라미터로 넘긴 User 객체에 id가 담긴다.

동시다발로 요청을 하는 경우 이 값이 계속 업데이트되면 문제가 되지 않을까 생각했는데, 그렇지 않다.
MySQL 공식 문서에 따르면 다음과 같다.

For LAST_INSERT_ID(), the most recently generated ID is maintained in the server on a per-connection basis. It is not changed by another client. It is not even changed if you update another AUTO_INCREMENT column with a nonmagic value (that is, a value that is not NULL and not 0). Using LAST_INSERT_ID() and AUTO_INCREMENT columns simultaneously from multiple clients is perfectly valid. Each client will receive the last inserted ID for the last statement that client executed.

커넥션 별로 _LAST_INSERT_ID_가 관리되므로 여러개의 요청이 동시에 발생해도 문제가 없다.

'개발 > 데이터베이스' 카테고리의 다른 글

ACID (Atomicity, Consistency, Isolation, Durability)  (0) 2020.02.03

+ Recent posts