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 |
---|