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