MySQL에서 뷰(View)를 기반으로 새로운 테이블을 만들고 싶다면 CREATE TABLE ... SELECT 구문을 활용하면 됩니다. 뷰에 저장된 데이터를 그대로 복사하여 실제 물리 테이블로 생성할 수 있어, 데이터 백업이나 스냅샷 생성 시 매우 유용합니다.
기본 문법
뷰로부터 테이블을 생성하는 기본 문법은 다음과 같습니다.
CREATE TABLE yourTableName SELECT * FROM yourViewName;
실습 예제
1단계: 원본 테이블 생성
먼저 예제로 사용할 테이블을 생성합니다.
mysql> CREATE TABLE DemoTable830(Name VARCHAR(100)); Query OK, 0 rows affected (0.91 sec)
2단계: 데이터 삽입
INSERT 명령어를 사용해 몇 개의 레코드를 추가합니다.
mysql> INSERT INTO DemoTable830 VALUES('Chris');
Query OK, 1 row affected (0.41 sec)
mysql> INSERT INTO DemoTable830 VALUES('Robert');
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO DemoTable830 VALUES('David');
Query OK, 1 row affected (0.09 sec)
mysql> INSERT INTO DemoTable830 VALUES('Mike');
Query OK, 1 row affected (0.16 sec)3단계: 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> SELECT * FROM DemoTable830;
실행 결과는 다음과 같습니다.
+--------+ | Name | +--------+ | Chris | | Robert | | David | | Mike | +--------+ 4 rows in set (0.00 sec)
뷰(View) 생성하기
이제 위 테이블을 기반으로 뷰를 생성합니다.
mysql> CREATE VIEW table_view AS SELECT * FROM DemoTable830; Query OK, 0 rows affected (0.39 sec)
뷰로부터 테이블 생성하기
뷰가 준비되었으니, 이 뷰를 이용해 새로운 테이블을 생성해 보겠습니다. 아래 쿼리를 실행하면 뷰의 데이터 전체가 새 테이블에 복사됩니다.
mysql> CREATE TABLE DemoTable831 SELECT * FROM table_view; Query OK, 4 rows affected (1.64 sec) Records: 4 Duplicates: 0 Warnings: 0
결과 확인
뷰로부터 생성된 테이블의 레코드를 조회하여 정상적으로 데이터가 복사되었는지 확인합니다.
mysql> SELECT * FROM DemoTable831;
실행 결과는 다음과 같습니다.
+--------+ | Name | +--------+ | Chris | | Robert | | David | | Mike | +--------+ 4 rows in set (0.00 sec)
정리 및 참고 사항
이처럼 CREATE TABLE ... SELECT 구문을 사용하면 뷰의 데이터를 손쉽게 새 테이블로 복사할 수 있습니다. 다만 몇 가지 주의할 점이 있습니다.
인덱스 미복원: 이 방식으로 생성된 테이블은 원본 테이블의 인덱스(PRIMARY KEY, UNIQUE 등)와 AUTO_INCREMENT 속성이 자동으로 복사되지 않습니다. 필요하다면 생성 후 별도로 ALTER TABLE 문을 사용해 인덱스를 추가해야 합니다.
데이터 타입 유지: 컬럼의 데이터 타입과 NULL 여부는 뷰를 통해 그대로 상속되므로, 대부분의 경우 스키마 구조는 유지됩니다.
LIKE 구문과의 차이: 테이블 구조만 복사하고 싶다면 CREATE TABLE ... LIKE 구문을 사용하는 것이 좋으며, 데이터까지 함께 복사하려면 이번 예제처럼 SELECT 절을 활용하면 됩니다.