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

MySQL에서 오류 1064 없이 INSERT INTO ... SELECT 문을 올바르게 사용하는 방법

INSERT INTO ... SELECT란 무엇인가?

MySQL에서 한 테이블의 데이터를 다른 테이블로 복사할 때, INSERT INTO ... VALUES 구문 안에 서브쿼리를 잘못 작성하면 오류 1064(구문 오류)가 발생하기 쉽습니다. 이런 경우에는 INSERT INTO ... SELECT 문을 사용하면 됩니다. 이 구문은 SELECT 쿼리의 결과를 그대로 다른 테이블에 삽입하므로, 오류 없이 간단하고 안전하게 데이터를 복사할 수 있습니다.

아래 예제를 통해 실제 사용 방법을 단계별로 살펴보겠습니다.

1단계: 첫 번째 테이블 생성

먼저 원본 데이터가 담길 테이블을 생성합니다.

mysql> create table DemoTable1
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> FirstName varchar(100)
-> );
Query OK, 0 rows affected (0.57 sec)

2단계: 테이블에 레코드 삽입

insert 명령을 사용하여 테이블에 샘플 데이터를 추가합니다.

mysql> insert into DemoTable1(FirstName) values('John');
Query OK, 1 row affected (0.18 sec)

mysql> insert into DemoTable1(FirstName) values('Chris');
Query OK, 1 row affected (0.13 sec)

3단계: 데이터 확인

select 문으로 테이블에 저장된 모든 레코드를 조회합니다.

mysql> select *from DemoTable1;

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

+----+-----------+
| Id | FirstName |
+----+-----------+
| 1 | John |
| 2 | Chris |
+----+-----------+
2 rows in set (0.00 sec)

4단계: 두 번째 테이블 생성

이제 데이터를 복사해 넣을 대상 테이블을 생성합니다.

mysql> create table DemoTable2
-> (
-> CustomerId int,
-> CustomerName varchar(100)
-> );
Query OK, 0 rows affected (0.43 sec)

5단계: INSERT INTO SELECT로 데이터 복사

여기서 핵심입니다. VALUES 절에 서브쿼리를 넣지 말고, INSERT INTO ... SELECT 형식으로 작성해야 오류 1064를 피할 수 있습니다.

mysql> insert into DemoTable2(CustomerId,CustomerName)
-> select Id,FirstName from DemoTable1;
Query OK, 2 rows affected (0.17 sec)
Records: 2 Duplicates: 0 Warnings: 0

6단계: 복사 결과 확인

select 문으로 두 번째 테이블의 전체 레코드를 조회합니다.

mysql> select *from DemoTable2;

첫 번째 테이블의 데이터가 그대로 복사된 것을 확인할 수 있습니다.

+------------+--------------+
| CustomerId | CustomerName |
+------------+--------------+
| 1 | John |
| 2 | Chris |
+------------+--------------+
2 rows in set (0.00 sec)

정리

테이블 간 데이터를 복사할 때는 INSERT INTO 테이블명(컬럼...) SELECT 컬럼... FROM 원본테이블; 형식을 사용하세요. VALUES 절에 SELECT 서브쿼리를 직접 넣는 실수만 피하면 오류 1064를 손쉽게 예방할 수 있으며, 조건(WHERE), 정렬(ORDER BY) 등 다양한 SELECT 절도 함께 활용할 수 있습니다.