MySQL에서 AUTO_INCREMENT가 설정된 컬럼을 가진 테이블에 INSERT INTO ... SELECT 구문을 활용하면, 다른 쿼리의 결과값을 그대로 새 레코드로 삽입할 수 있습니다. 아래 예제를 통해 실제 동작 과정을 단계별로 살펴보겠습니다.
1. AUTO_INCREMENT 테이블 생성
먼저 UserId 컬럼에 자동 증가(AUTO_INCREMENT) 속성과 기본 키(PRIMARY KEY)를 지정한 테이블을 생성합니다.
mysql> create table DemoTable1923
(
UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
UserName varchar(20)
);
Query OK, 0 rows affected (0.00 sec)
UserId는 int NOT NULL AUTO_INCREMENT PRIMARY KEY로 정의되어 있어, 값을 직접 지정하지 않으면 자동으로 순차적인 번호가 부여됩니다.
2. INSERT INTO SELECT로 레코드 삽입
이제 INSERT INTO ... SELECT 구문을 사용해 레코드를 삽입합니다. 일반적인 VALUES 절 대신 SELECT 문의 결과를 값으로 전달하는 방식입니다.
mysql> insert into DemoTable1923(UserId,UserName)
select 101 as UserId,'Chris' as UserName;
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> insert into DemoTable1923(UserId,UserName)
select 102 as UserId,'Robert' as UserName;
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> insert into DemoTable1923(UserId,UserName)
select 103 as UserId,'Sam' as UserName;
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0
SELECT 문 내에서 as UserId, as UserName처럼 별칭(alias)을 지정하면 코드의 가독성이 좋아지고, 어떤 값이 어느 컬럼에 들어가는지 명확하게 파악할 수 있습니다.
3. 저장된 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 삽입 결과를 확인합니다.
mysql> select * from DemoTable1923;
위 쿼리를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.
+--------+----------+ | UserId | UserName | +--------+----------+ | 101 | Chris | | 102 | Robert | | 103 | Sam | +--------+----------+ 3 rows in set (0.00 sec)
정리
이처럼 INSERT INTO ... SELECT 구문은 단순히 상수 값을 삽입할 때뿐만 아니라, 다른 테이블의 데이터를 조회하면서 동시에 새 테이블로 복사할 때도 유용하게 활용됩니다. 특히 WHERE 조건이나 JOIN과 함께 사용하면 원하는 데이터만 선별적으로 이동시킬 수 있어 대량의 데이터 마이그레이션 작업에서도 효율적입니다.