앞에서는 테이블의 구조와 데이터를 한 번에 복사하는 방법에 대해서 학습했습니다. 그런 데 데이터를 제외한 테이블의 구조만을 복사할 수도 있습니다. 게시글과 같이 다중 테이 블로 분산된 포럼 등을 개발할 때 테이블의 구조만 새롭게 복사하는 기능은 매우 유용합니다.

| 쿼리 문법 |

CREATE TABLE 신규_테이블 LIKE 복사_테이블; 

테이블의 구조만 복사할 때는 LIKE 키워드를 이용합니다.

15.2.1 쿼리 실행

이번에는 기존 members 테이블의 구조만 복사해 보도록 합니다.

| 예제 쿼리 |

create table members2 like members; 

먼저 복사를 하기 전에 desc 명령과 select 명령을 통하여 구조와 데이터를 확인합니다.

| 콘솔 실습 화면 |

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)

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)

테이블의 정보만 members2로 구조만 복사합니다.

| 콘솔 실습 화면 |

mysql> create table members2 like members;
Query OK, 0 rows affected (0.03 sec)

테이블 구조가 정상적으로 복사되었습니다. 복사된 테이블을 desc 명령을 통해서 확인해 봅니다. 또한 select를 통하여 데이터의 목록도 같이 출력해 봅니다.

| 콘솔 실습 화면 |

mysql> desc members2;
+-----------+--------------+------+-----+---------+----------------+
| 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.03 sec)

mysql> select * from members2;
Empty set (0.00 sec)

위의 결과를 보면 테이블은 정상적으로 복사가 잘 되었지만 데이터는 하나도 복사되지 않았습니다. select로 출력 시 데이터가 없는 것을 확인해 볼 수 있습니다.

15.2.2 PHP 실행

PHP 코드를 통하여 테이블의 구조를 복사해 봅니다. 새로운 테이블 복사 메서드를 추가 하여 소스에 삽입합니다.

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

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

                $queryString = "create table $dstName like $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-02.php

<?php

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

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

?>

화면 출력

mysql connected!
쿼리성공] create table members_1 like members
테이블 복사!