이번에는 거꾸로 테이블의 구조는 복사하지 않고 데이터만 추출하여 복사합니다. 데이터 를 복사할 때는 상대쪽의 테이블의 구조는 서로 동일해야 합니다.

데이터만 복사할 때는 INSERT INTO 명령을 기반으로 동작합니다. 또한 테이블의 데이 터를 조회하는 SELECT를 결합합니다.

| 쿼리 문법 |

INSERT INTO 기본테이블 SELECT * FROM 복사_테이블; 

SELECT를 통하여 데이터를 조회하고, 조회한 데이터를 INSERT로 삽입 처리하게 됩니다.

15.3.1 쿼리 실습

다음은 비어 있는 members2 테이블에 members 테이블의 데이터 내용을 추출하여 삽 입해 보도록 합니다.

| 콘솔 실습 화면 |

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

테이블 members2는 아무런 내용이 없는 비어 있는 테이블입니다.

| 예제 쿼리 |

insert into members2 select * from members; 

| 콘솔 실습 화면 |

mysql> insert into members2 select * from members;
Query OK, 4 rows affected (0.01 sec)
Records: 4  Duplicates: 0  Warnings: 0

정상적으로 데이터가 복사되었습니다. 이때 members2와 members의 테이블 구조는 동일해야 합니다.

| 콘솔 실습 화면 |

mysql> select * from members2;
+----+----------+-----------+-------------+-------+---------+
| 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에 members의 데이터만 추출하여 삽입합니다.

15.3.2 PHP 실습

PHP 코드를 통하여 데이터만 추출하여 복사를 진행해 보도록 하겠습니다.

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

// select 데이터를 테이블로 복사합니다.
public function insertSelect($src,$dst,$fields)
{
            if ($src){

                if ($fields){
                    $queryString = "insert into $dst ($fields) select $fields from $src";
                } else {
                    $queryString = "insert into $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-03.php

<?php

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

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

?>

화면 출력

mysql connected!
쿼리성공] insert into members_1 select * from members
데이터 복사!