MySQL에서는 CREATE TABLE ... AS SELECT 구문을 사용하면 뷰(View)를 기반으로 손쉽게 새 테이블을 생성할 수 있습니다. 기본 문법은 다음과 같습니다.
CREATE TABLE yourTableName AS SELECT yourColumnName1,yourColumnName2,yourColumnName3,........N from yourViewName;
위 쿼리를 실행하려면 먼저 원본 테이블을 생성하고, 그 위에 뷰를 만든 뒤, 마지막으로 뷰를 이용해 테이블을 생성하면 됩니다. 단계별로 자세히 살펴보겠습니다.
1단계: 원본 테이블 생성하기
먼저 뷰의 기반이 될 테이블을 생성해야 합니다. 아래 쿼리로 테이블을 만들어 보겠습니다.
mysql> create table StuedntInformation
-> (
-> Id int,
-> Name varchar(100)
-> );
Query OK, 0 rows affected (0.54 sec)2단계: 뷰(View) 생성하기
테이블 생성이 완료되면 해당 테이블 위에 뷰를 생성합니다. 뷰 생성 쿼리는 다음과 같습니다.
mysql> CREATE VIEW view_Student AS SELECT Id,Name from StuedntInformation; Query OK, 0 rows affected (0.11 sec)
이제 'view_Student'라는 이름의 뷰가 생성되었습니다. SHOW 명령어를 사용하면 뷰의 정의(DDL)를 확인할 수 있습니다.
mysql> SHOW CREATE VIEW view_Student;
출력 결과
+--------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+ | View | Create View | character_set_client | collation_connection | +--------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+ | view_student | CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`%` SQL SECURITY DEFINER VIEW `view_student` AS select `stuedntinformation`.`Id` AS `Id`,`stuedntinformation`.`Name` AS `Name` from `stuedntinformation` | utf8 | utf8_general_ci | +--------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+ 1 row in set (0.00 sec)
3단계: 뷰를 이용해 새 테이블 생성하기
이제 앞에서 만든 'view_Student' 뷰를 사용하여 새 테이블을 생성합니다. 뷰 기반 테이블 생성 쿼리는 다음과 같습니다.
mysql> CREATE TABLE CreatingTableUsingViewStudent AS
-> select Id,Name from view_Student;
Query OK, 0 rows affected (0.50 sec)
Records: 0 Duplicates: 0 Warnings: 04단계: 생성된 테이블 구조 확인하기
새로 생성된 테이블의 DDL 역시 SHOW 명령어로 확인할 수 있습니다.
mysql> show create table CreatingTableUsingViewStudent;
출력 결과
+-------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | CreatingTableUsingViewStudent | CREATE TABLE `creatingtableusingviewstudent` ( `Id` int(11) DEFAULT NULL, `Name` varchar(100) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci | +-------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
참고 사항
CREATE TABLE ... AS SELECT 방식은 데이터와 컬럼 구조를 그대로 복사하지만, 원본 테이블에 설정된 인덱스(PRIMARY KEY 포함), 외래 키, AUTO_INCREMENT 속성 등은 복사되지 않습니다. 따라서 키나 인덱스가 필요한 경우에는 복사 후 ALTER TABLE 문으로 직접 추가해 주어야 합니다. 또한 뷰에 정의된 조건(WHERE 절 등)이 있다면 그 조건에 맞는 결과 데이터만 새 테이블에 저장됩니다.