전체 복사는 생각보다 간단한 쿼리 명령으로 처리할 수 있습니다. 전체 복사는 1개의 테 이블 구조와 데이터 내용 전체를 복사합니다.

| 쿼리 문법 |

CREATE TABLE 신규_테이블 SELECT * FROM 복사_테이블; 

위의 쿼리 문법을 보면 SELECT를 통하여 전체 데이터를 출력합니다. 출력 결과를 CREATE TABLE 로 연결하여 테이블을 생성합니다. 이때 테이블의 구조는 SELECT를 실 행하는 테이블의 구조와 동일하게 새로운 테이블을 생성합니다.

15.1.1 쿼리 실행

테이블을 복사하기 전에 desc로 기존 테이블의 구조 정보를 확인해 봅니다.

| 콘솔 실습 화면 |

//기존 members 테이블의 구조를 확입니다
mysql> desc members;
+-----------+--------------+------+-----+---------+----------------+
| Field     | Type         | Null | Key | Default | Extra          |
+-----------+--------------+------+-----+---------+----------------+
| Id        | int(11)      | NO   | PRI | NULL    | auto_increment |
| LastName  | varchar(255) | YES  |     | NULL    |                |
| FirstName | varchar(255) | YES  |     | NULL    |                |
| Address   | varchar(255) | YES  |     | NULL    |                |
| City      | varchar(255) | YES  |     | NULL    |                |
| Country   | varchar(255) | YES  |     | NULL    |                |
+-----------+--------------+------+-----+---------+----------------+
6 rows in set (0.02 sec) 

테이블 안의 내용도 확인을 합니다. SELECT 명령을 통하여 전체 데이터를 확인합니다.

| 콘솔 실습 화면 |

// members 테이블의 데이터를 확인합니다.
mysql> select * from members;
+----+----------+-----------+-------------+-------+---------+
| Id | LastName | FirstName | Address     | City  | Country |
+----+----------+-----------+-------------+-------+---------+
|  1 | hojin    | lee       | shinchon    | seoul | korea   |
|  2 | jiny     | NULL      | NULL        | NULL  | korea   |
|  3 | james    | kim       | youngdun-po | seoul | korea   |
|  4 | eric     | jung      | seocho-gu   | seoul | korea   |
+----+----------+-----------+-------------+-------+---------+
4 rows in set (0.00 sec) 

테이블의 정보와 테이블의 데이터 내용을 복사합니다. members 테이블을 members1 로 복사합니다.

create table members1 select * from members; 

| 콘솔 실습 화면 |

// members 테이블을 members1 으로 복사합니다.
mysql> create table members1 select * from members;
Query OK, 4 rows affected (0.03 sec)
Records: 4  Duplicates: 0  Warnings: 0

테이블이 정상적으로 복사되었습니다. show tables 명령을 통하여 새로운 테이블이 하나 더 생성되었는지 확인합니다.

| 콘솔 실습 화면 |

// 테이블 목록으로 복사된 테이블을 확인합니다.
mysql> show tables;
+----------------+
| Tables_in_jiny |
+----------------+
| members        |
| members1       |
+----------------+
2 rows in set (0.00 sec)

기존의 members 테이블을 이용하여 새로운 members1 테이블이 정상적으로 생성되었 습니다. 새롭게 생성된 members1의 구조와 데이터 내용을 확인해 봅니다.

| 콘솔 실습 화면 |

// 복사된 members1 테이블 구조를 확인합니다.
mysql> desc members1;
+-----------+--------------+------+-----+---------+-------+
| Field     | Type         | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| Id        | int(11)      | NO   |     | 0       |       |
| LastName  | varchar(255) | YES  |     | NULL    |       |
| FirstName | varchar(255) | YES  |     | NULL    |       |
| Address   | varchar(255) | YES  |     | NULL    |       |
| City      | varchar(255) | YES  |     | NULL    |       |
| Country   | varchar(255) | YES  |     | NULL    |       |
+-----------+--------------+------+-----+---------+-------+
6 rows in set (0.03 sec)

// 복사된 members1 테이블의 데이터도 확인합니다.
mysql> select * from members1;
+----+----------+-----------+-------------+-------+---------+
| Id | LastName | FirstName | Address     | City  | Country |
+----+----------+-----------+-------------+-------+---------+
|  1 | hojin    | lee       | shinchon    | seoul | korea   |
|  2 | jiny     | NULL      | NULL        | NULL  | korea   |
|  3 | james    | kim       | youngdun-po | seoul | korea   |
|  4 | eric     | jung      | seocho-gu   | seoul | korea   |
+----+----------+-----------+-------------+-------+---------+
4 rows in set (0.00 sec)

15.1.2 PHP 실행

PHP 코드를 통하여 테이블을 복사해 봅니다. 먼저 복사 메서드를 하나 생성하여 소스에 적용합니다.

| PHP 예제 | mysql.class.php 파일에 메서드 예제를 추가합니다.

// 테이블 구조와 데이터 모두를 복사합니다.
public function copyTableWithAll($src,$dst)
{
            if ($src) {
                if ($dst){
                    $dstName = $dst;
                } else {
                    $dstName = $src."_copy";
                }

                $queryString = "create table $dst select * from $src;";

                // 쿼리를 전송합니다.
                if (mysqli_query($this->dbcon, $queryString)=== TRUE) {
                    $this->msgEcho("쿼리성공] ".$queryString);
                    $this->msgEcho(" 테이블 전체복사!");

                    // 객체 반환, 매서드체인
                    return $this; 

                } else {
                    $this->msgEcho("Error] ".$queryString);
                }

            } else {
                $this->msgEcho("Error] 원본 테이블명을 적어주세요.");
            }           
            
}

예제 파일 | copy-01.php

<?php

	include "dbinfo.php";
	include "mysql.class.php";
 
	// ++ Mysqli DB 연결.
	$db = new JinyMysql();

	// 테이블을 복사합니다.
	$db->copyTableWithALL("members", "members_all");

?>

화면 출력

mysql connected!
쿼리성공] create table members_all select * from members;
테이블 전체복사!