HOWTO · MySQL

MySQL에 최근 삽입된 레코드의 ID 가져오기

이 튜토리얼은 MySQL에서 최근에 삽입된 레코드의 ID를 얻는 방법에 대해 다룹니다.

이 튜토리얼은 코드 예제와 함께 LAST_INSERT_ID(), MAX()ORDER BY DESC라는 세 가지 접근 방식을 설명하고 MySQL에서 최근 삽입된 레코드의 ID를 가져오는 방법을 보여줍니다.

MySQL 테이블에 최근 삽입된 레코드의 ID 가져오기

MySQL 테이블에 최근 삽입된 레코드의 ID를 얻기 위해 사용할 수 있는 세 가지 방법이 있습니다. 이들 모두가 아래에 나열되어 있으며 다음 접근 방식을 사용하려면 테이블에 AUTO_INCREMENT 필드가 있어야 합니다.

  1. LAST_INSERT_ID() 기능을 사용하십시오.
  2. max() 기능을 사용하십시오.
  3. ORDER BY DESC 절을 사용하십시오.

LAST_INSERT_ID() 함수를 사용하여 MySQL에서 마지막으로 삽입된 행의 ID 가져오기

LAST INSERT ID() 함수는 AUTO INCREMENT 필드가 있는 테이블에서 INSERT 또는 UPDATE 명령을 사용할 때 마지막으로 삽입되거나 업데이트된 레코드(행)의 ID를 가져오는 데 사용할 수 있습니다.

tb_courses 테이블을 준비하고 샘플 데이터로 채워서 이해해 봅시다.

쿼리 예:

# create a table
CREATE TABLE tb_courses (
      ID INT NOT NULL AUTO_INCREMENT,
      COURSE_NAME VARCHAR(255) NOT NULL,
      PRIMARY KEY (id)
);

# insert data
INSERT INTO tb_courses (COURSE_NAME) VALUES ('Introduction to Java');
INSERT INTO tb_courses (COURSE_NAME) VALUES ('Python for Beginners');
INSERT INTO tb_courses (COURSE_NAME) VALUES('Database Systems');

# display data
SELECT * FROM tb_courses;

출력:

+----+----------------------+
| ID | COURSE_NAME          |
+----+----------------------+
|  1 | Introduction to Java |
|  2 | Python for Beginners |
|  3 | Database Systems     |
+----+----------------------+
3 rows in set (0.00 sec)

이제 다음 명령을 실행하여 가장 최근에 삽입된 레코드의 ID를 검색합니다.

쿼리 예:

SELECT LAST_INSERT_ID();

출력:

+------------------+
| LAST_INSERT_ID() |
+------------------+
|                3 |
+------------------+
1 row in set (0.00 sec)

올바른 값을 반환합니다. 3은 마지막으로 삽입된 ID입니다. 이제 더 많은 데이터를 삽입하고 여러 행을 삽입합니다.

쿼리 예:

# insert data
INSERT INTO tb_courses (COURSE_NAME)
VALUES
('Introduction to Machine Learning'),
('Deep Learning'),
('Statistics');

# display data
SELECT * FROM tb_courses;

출력:

+----+----------------------------------+
| ID | COURSE_NAME                      |
+----+----------------------------------+
|  1 | Introduction to Java             |
|  2 | Python for Beginners             |
|  3 | Database Systems                 |
|  4 | Introduction to Machine Learning | <======================
|  5 | Deep Learning                    |
|  6 | Statistics                       |
+----+----------------------------------+
6 rows in set (0.00 sec)

다음 쿼리를 실행하여 가장 최근에 삽입된 ID를 가져옵니다.

쿼리 예:

SELECT LAST_INSERT_ID();

출력:

+------------------+
| LAST_INSERT_ID() |
+------------------+
|                4 |
+------------------+
1 row in set (0.00 sec)

LAST_INSERT_ID() 메서드가 마지막 레코드가 아닌 첫 번째 레코드의 생성된 값을 반환하는 출력을 볼 수 있습니다. 한 행에 단일 INSERT 문을 사용하는 경우 LAST_INSERT_ID()를 사용하여 마지막으로 삽입된 ID만 가져옵니다.

둘 이상의 행에 단일 INSERT 문을 사용하는 경우 LAST_INSERT_ID() 함수는 처음 삽입된 레코드에 대해서만 생성된 값을 출력합니다(위 출력 참조). 생성된 ID는 서버에서 연결당 기준으로 유지됩니다.

해당 클라이언트에 의해 AUTO INCREMENT 필드에 영향을 미치는 가장 최근 명령문에 대해 생성된 첫 번째 AUTO INCREMENT 값은 해당 클라이언트에 대한 LAST INSERT ID() 메소드에 의해 반환됩니다. 따라서 LAST_INSERT_ID()의 반환 값은 사용자별이며 서버에서 실행되는 다른 사용자의 다른 명령문에 영향을 받지 않습니다.

MAX() 함수를 사용하여 MySQL에 마지막으로 삽입된 행의 ID 가져오기

MAX() 함수를 사용하여 행의 마지막 삽입된 ID를 가져올 수 있습니다. 이 방법에 대해 하나 또는 여러 행에 대해 단일 INSERT 문을 사용하는지 여부는 중요하지 않습니다.

먼저 MAX() 함수를 사용하여 한 행의 단일 INSERT 문을 사용하여 tb_courses 테이블을 채웁니다.

쿼리 예:

INSERT INTO tb_courses (COURSE_NAME) VALUES ('Data Science');
SELECT MAX( ID ) FROM tb_courses;

출력:

+-----------+
| MAX( ID ) |
+-----------+
|         7 |
+-----------+
1 row in set (0.02 sec)

올바른 7 값을 반환했습니다. 여러 행에 대해 단일 INSERT 문을 사용한 다음 MAX() 함수를 사용하여 마지막으로 삽입된 ID를 검색합니다.

쿼리 예:

INSERT INTO tb_courses (COURSE_NAME)
VALUES
('Introduction to Recommender Systems'),
('Data Structures'),
('Analysis of Algorithms');

SELECT MAX( ID ) FROM tb_courses;

출력:

+-----------+
| MAX( ID ) |
+-----------+
|        10 |
+-----------+
1 row in set (0.00 sec)

올바른 값인 10을 반환합니다.

ORDER BY DESC를 사용하여 MySQL에 마지막으로 삽입된 행의 ID 가져오기

ORDER BY DESC 절은 ID 필드를 사용하고 첫 번째 행(정렬 전 마지막 행)에서 ID를 가져오는 내림차순으로 데이터를 정렬하는 데 사용할 수도 있습니다.

쿼리 예:

SELECT ID FROM tb_courses ORDER BY ID DESC LIMIT 1;

출력:

+----+
| ID |
+----+
| 10 |
+----+
1 row in set (0.05 sec)