전체 복사는 생각보다 간단한 쿼리 명령으로 처리할 수 있습니다. 전체 복사는 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;
테이블 전체복사!