[MySQL] LAST_INSERT_ID(), MAX()

방울·2024년 5월 31일
0

주문 DB를 생성하는 과정에서 주문 시스템에서 새로운 데이터를 생성한 직후 그 데이터를 참조해야 할 때가 있었다. 방금 삽입된 데이터를 가져오는 작업이 필요할 때 MySQL에서 주로 사용되는 두 가지 방법이 있다. 각각의 방법에 대해 알아보자.

1. LAST_INSERT_ID() 함수

LAST_INSERT_ID() 함수는 가장 최근에 AUTO_INCREMENT 컬럼에 삽입된 값을 반환한다. 이 함수의 가장 큰 장점은 멀티 유저 환경에서도 안정적으로 마지막으로 삽입된 행의 ID를 가져올 수 있다는 것이다. 즉, 여러 사용자가 동시에 데이터를 삽입하더라도 각 사용자는 자신이 삽입한 데이터의 ID를 정확히 가져올 수 있다.

INSERT INTO orders (title, quantity) VALUES ('어린왕자', 1);
SELECT LAST_INSERT_ID();

장점

  • 멀티 유저 환경에서도 안전하게 사용할 수 있다.
  • 세션별로 마지막 삽입 ID를 유지하기 때문에 다른 세션의 작업에 영향을 받지 않는다.

단점

  • 시간차 공격으로 인해 오류가 간혹 발생할 수 있다. 매우 드문 경우지만, 네트워크 지연 등의 이유로 예상치 못한 값이 반환될 수 있음

2. MAX() 함수

MAX() 함수를 사용하여 특정 컬럼의 최대값을 찾는 방법도 있다. 이 방식은 특히 AUTO_INCREMENT 속성이 없는 컬럼에서 마지막으로 삽입된 값을 찾고자 할 때 유용하다.

SELECT MAX(order_id) FROM orders;

장점

  • AUTO_INCREMENT 속성이 없는 컬럼에서도 사용할 수 있다.

단점

  • 멀티 유저 환경에서는 안정적이지 않을 수 있다. 동시에 여러 사용자가 데이터를 삽입하면, 어떤 사용자의 데이터가 마지막인지 구분하기 어려울 수 있다.
  • 성능 문제가 발생할 수 있다. 대용량 데이터가 있는 테이블에서는 MAX() 함수의 처리 시간이 길어질 수 있다.

작업의 특성과 환경에 따라 적절한 방법을 선택하는 것이 중요하다. 일반적으로 LAST_INSERT_ID() 함수의 사용이 더 안정적이고 추천되는 방법이라고 한다!

profile
방울방울

0개의 댓글