[컴][db] insert 문 하나로 여러 값을 insert 하는 경우 LAST_INSERT_ID() 값

 

mysql / mariadb / 왜 last_insert_id 값이 다른지 / 큰지 / 너무 크다/ too higher / 왜 높게 나오는가 / 왜 auto_increment 값으로.

insert 문 하나로 여러 값을 insert 하는 경우 LAST_INSERT_ID()

from: MySQL :: MySQL 8.0 Reference Manual :: 12.16 Information Functions

Important

If you insert multiple rows using a single INSERT statement, LAST_INSERT_ID() returns the value generated for the first inserted row only. The reason for this is to make it possible to reproduce easily the same INSERT statement against some other server.

하나의 INSERT 문을 사용하여 여러 행을 삽입하는 경우 LAST_INSERT_ID()는 ’처음 삽입된 행에 대해 생성된 값’을 반환한다. 그 이유는 다른 서버에 대해 동일한 INSERT 문을 쉽게 재현할 수 있도록 하기 위해서다.

다음처럼 한번에 여러값을 insert 하는 경우가 있다고 가정하자. mytable 은 empty 이다.

이때, 아래 insert 문으로 인해 10개가 insert 된다고 하면, LAST_INSERT_ID()는 1 을 return 해준다.

INSERT mytable (
  name
)
SELECT name
FROM product
WHERE id > 0
;

SELECT LAST_INSERT_ID();

마지막 id 를 구하는 법

코드로 이것을 푼다면, insert 이후 return 되는 insert 된 row 의 개수를 가지고, LAST_INSERT_ID 의 값에 더해서 마지막 값을 구하면 된다. 식으로 나타내면 다음과 같다.

last_insert_id = LAST_INSERT_ID() + count_of_the_inserted_rows - 1

댓글 없음:

댓글 쓰기