테이블의 열에 있는 모든 값을 John1, John2, John3과 같이 순차적인 숫자가 붙은 형태로 업데이트하려면, 증분 값(1, 2, 3...)을 생성한 뒤 기존 레코드와 연결(concatenate)하면 됩니다. 이 과정을 단계별로 살펴보겠습니다.
1. 테이블 생성
먼저 예제에 사용할 테이블을 만듭니다.
mysql> create table DemoTable
(
StudentId varchar(80)
);
Query OK, 0 rows affected (0.50 sec)2. 데이터 삽입
INSERT 명령어를 사용해 테이블에 레코드를 추가합니다. 이 예제에서는 동일한 이름 'John'을 여러 개 삽입합니다.
mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.07 sec)
mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.07 sec)
mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.08 sec)3. 현재 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+-----------+ | StudentId | +-----------+ | John | | John | | John | | John | | John | +-----------+ 5 rows in set (0.00 sec)
4. 숫자 증분 값을 붙여 업데이트하는 쿼리
아래 쿼리는 사용자 변수 @row를 활용해 각 행마다 1씩 증가하는 숫자를 만들고, 이를 'John' 문자열과 연결하여 업데이트합니다.
mysql> update DemoTable,(select @row := 0) r set StudentId =concat('John',@row := @row+ 1);
Query OK, 5 rows affected (0.11 sec)
Rows matched: 5 Changed: 5 Warnings: 0쿼리 설명:
(select @row := 0) r— 서브쿼리를 통해 사용자 변수@row를 0으로 초기화합니다.@row := @row + 1— 각 행이 처리될 때마다 변수 값을 1씩 증가시킵니다.concat('John', ...)— 'John' 문자열 뒤에 증가된 숫자를 붙여 새로운 값을 만듭니다.
5. 업데이트 결과 확인
다시 한번 테이블을 조회해 결과를 확인합니다.
mysql> select *from DemoTable;
모든 이름에 순차적인 번호가 성공적으로 붙은 것을 볼 수 있습니다.
+-----------+ | StudentId | +-----------+ | John1 | | John2 | | John3 | | John4 | | John5 | +-----------+ 5 rows in set (0.00 sec)
이처럼 MySQL의 사용자 변수와 CONCAT 함수를 조합하면, 단일 UPDATE 문만으로 열 전체의 값에 고유한 순차 번호를 손쉽게 부여할 수 있습니다.