Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 동일한 테이블에 MAX(col)+1 값 삽입하는 방법

MySQL에서는 INSERT ... SELECT 문과 MAX() 집계 함수를 조합하면, 같은 테이블의 특정 컬럼에 저장된 값 중 가장 큰 값보다 1만큼 큰 값을 손쉽게 삽입할 수 있습니다. 이번 글에서는 실제 예제를 통해 그 과정을 단계별로 살펴보겠습니다.

1. 테이블 생성

먼저 예제에 사용할 테이블을 생성합니다.

mysql> create table DemoTable1484
-> (
-> Id int
-> );
Query OK, 0 rows affected (0.46 sec)

2. 샘플 데이터 삽입

INSERT 명령어를 사용해 몇 개의 레코드를 추가합니다.

mysql> insert into DemoTable1484 values(100);
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable1484 values(175);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1484 values(165);
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable1484 values(145);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1484 values(170);
Query OK, 1 row affected (0.10 sec)

3. 현재 데이터 확인

SELECT 문으로 테이블의 전체 레코드를 조회해 보겠습니다.

mysql> select * from DemoTable1484;

실행 결과는 다음과 같습니다.

+------+
| Id |
+------+
| 100 |
| 175 |
| 165 |
| 145 |
| 170 |
+------+
5 rows in set (0.00 sec)

현재 이 테이블에서 가장 큰 Id 값은 175입니다.

4. MAX(Id)+1 값 삽입하기

동일한 테이블에 최댓값보다 1 큰 값을 삽입하는 핵심 쿼리는 다음과 같습니다.

mysql> insert into DemoTable1484(Id) select max(Id)+1 from DemoTable1484;
Query OK, 1 row affected (0.20 sec)
Records: 1 Duplicates: 0 Warnings: 0

이 쿼리는 SELECT max(Id)+1 FROM DemoTable1484로 계산된 결과값을 곧바로 같은 테이블의 Id 컬럼에 삽입하는 방식입니다.

5. 삽입 결과 검증

테이블의 레코드를 다시 한 번 조회해 보겠습니다.

mysql> select * from DemoTable1484;

새로운 값이 성공적으로 삽입된 것을 확인할 수 있습니다.

+------+
| Id |
+------+
| 100 |
| 175 |
| 165 |
| 145 |
| 170 |
| 176 |
+------+
6 rows in set (0.00 sec)

기존 최댓값이 175였기 때문에, 그보다 1 큰 176이 정상적으로 추가되었습니다.

참고 사항

이 방식은 간단하지만, 여러 사용자가 동시에 데이터를 삽입하는 환경에서는 경합 조건(race condition)으로 인해 중복된 값이 발생할 수 있습니다. 일련번호가 필요한 경우라면 MySQL의 AUTO_INCREMENT 옵션을 사용하는 것이 더 안전하고 권장되는 방법입니다.