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

MySQL 단일 쿼리로 ID 열의 모든 행을 1씩 증가시키는 방법

UPDATE 문으로 ID 열 전체를 1씩 증가시키기

MySQL에서 특정 ID 열의 모든 행 값을 한 번에 1씩 증가시키려면 UPDATE 명령문을 사용하면 됩니다. 이때 ORDER BY ... DESC 절을 함께 사용하는 것이 핵심인데요. ID 열이 기본 키(PRIMARY KEY)로 설정되어 있어 값의 고유성이 요구되는 경우, 가장 큰 값부터 내림차순으로 업데이트해야 중복 오류 없이 처리할 수 있기 때문입니다.

쿼리의 기본 문법은 다음과 같습니다.

UPDATE yourTableName SET yourIdColumnName = yourIdColumnName + 1 ORDER BY yourIdColumnName DESC;

예제 테이블 생성하기

위 문법을 실제로 확인해 보기 위해 먼저 테스트용 테이블을 생성해 보겠습니다.

mysql> create table IdColumnadd1Demo
   - > (
   - > Id int NOT NULL AUTO_INCREMENT PRIMARY KEY
   - > );
Query OK, 0 rows affected (0.58 sec)

테이블이 정상적으로 생성되었습니다. 이제 INSERT 명령문으로 레코드를 여러 개 추가합니다. AUTO_INCREMENT 속성 덕분에 값을 지정하지 않아도 ID가 자동으로 순차 증가합니다.

mysql> insert into IdColumnadd1Demo values();
Query OK, 1 row affected (0.12 sec)
mysql> insert into IdColumnadd1Demo values();
Query OK, 1 row affected (0.18 sec)
mysql> insert into IdColumnadd1Demo values();
Query OK, 1 row affected (0.17 sec)
mysql> insert into IdColumnadd1Demo values();
Query OK, 1 row affected (0.08 sec)
mysql> insert into IdColumnadd1Demo values();
Query OK, 1 row affected (0.10 sec)
mysql> insert into IdColumnadd1Demo values();
Query OK, 1 row affected (0.13 sec)
mysql> insert into IdColumnadd1Demo values();
Query OK, 1 row affected (0.25 sec)
mysql> insert into IdColumnadd1Demo values();
Query OK, 1 row affected (0.40 sec)

현재 데이터 확인하기

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

mysql> select *from IdColumnadd1Demo;

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

+----+
| Id |
+----+
|  1 |
|  2 |
|  3 |
|  4 |
|  5 |
|  6 |
|  7 |
|  8 |
+----+
8 rows in set (0.00 sec)

ID 값이 1부터 8까지 순서대로 저장된 것을 확인할 수 있습니다.

ID 열을 일괄적으로 +1 증가시키는 쿼리 실행

이제 앞서 소개한 UPDATE 문에 ORDER BY DESC를 적용하여 모든 ID 값을 1씩 증가시켜 보겠습니다.

mysql> update IdColumnadd1Demo set Id=Id+1 Order By Id DESC;
Query OK, 8 rows affected (0.18 sec)
Rows matched: 8 Changed: 8 Warnings: 0

총 8개의 행이 성공적으로 변경되었습니다. 만약 ORDER BY 절 없이 오름차순으로 업데이트했다면, ID 1을 2로 바꾸는 시점에 이미 존재하는 값과 충돌하여 기본 키 중복 오류가 발생했을 것입니다.

변경 결과 검증하기

다시 한번 SELECT 문으로 테이블을 조회하여 결과를 확인합니다.

mysql> select *from IdColumnadd1Demo;

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

+----+
| Id |
+----+
|  2 |
|  3 |
|  4 |
|  5 |
|  6 |
|  7 |
|  8 |
|  9 |
+----+
8 rows in set (0.00 sec)

모든 ID 값이 기존보다 정확히 1씩 증가하여 2부터 9까지 저장된 것을 볼 수 있습니다. 이처럼 UPDATE 문과 ORDER BY DESC의 조합만으로 단일 쿼리에서 기본 키 충돌 없이 전체 행을 안전하게 증가시킬 수 있습니다.