이전에는 테이블의 컬럼 전체에 대해서 데이터 복사를 진행했습니다. 만일 이전의 테이블 에 데이터가 하나도 없는 경우에는 문제가 없습니다. 하지만 테이블에는 프라이머리 키 등 중복을 허용하지 않는 컬럼도 존재합니다. 이런 경우에는 전체 복사보다는 컬럼을 선 택하여 복사하는 것이 중복으로 인한 오류를 방지할 수 있습니다.

| 쿼리 문법 |

INSERT INTO 기본테이블 (컬럼명) SELECT 컬럼명 FROM 복사_테이블; 

컬럼을 선택하여 복사할 때에는 기존 전체를 선택하는 * 자리에 컬럼명을 지정하면 됩니다.

15.4.1 쿼리 실습

컬럼을 지정하여 데이터를 복사해 봅니다.

| 콘솔 실습 화면 |

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 테이블에는 이미 데이터가 들어 있습니다. 만일 동일한 데이터를 한 번 더 복사해서 넣는다면 Id 값의 중복으로 실행 쿼리는 오류가 발생합니다.

이런 경우 Id 값을 제외한 컬럼 선택으로 데이터를 복사해 봅니다.

| 예제 쿼리 |

insert into members2 (LastName) select (LastName) from members; 

| 콘솔 실습 화면 |

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

복사 쿼리가 정상적으로 실행되었습니다. select를 통하여 테이블의 내용을 다시 한번 확인해 봅니다.

| 콘솔 실습 화면 |

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   |
|  5 | hojin    | NULL      | NULL        | NULL  | NULL    |
|  6 | jiny     | NULL      | NULL        | NULL  | NULL    |
|  7 | james    | NULL      | NULL        | NULL  | NULL    |
|  8 | eric     | NULL      | NULL        | NULL  | NULL    |
+----+----------+-----------+-------------+-------+---------+
8 rows in set (0.00 sec) 

동일한 데이터를 Id 값이 자동 증가된 형태로 추가되어 들어간 것을 확인할 수 있습니다.

15.4.2 PHP 실습

PHP 코드를 통하여 컬럼 선택 데이터 복사를 실습해 봅니다.

예제 파일 | copy-04.php

<?php
 
	include "dbinfo.php";
	include "mysql.class.php";
 
    // ++ Mysqli DB 연결.
    $db = new JinyMysql();
 
    // 테이블을 복사합니다.
    $db->insertSelect("members", "members1","FirstName");
 
?>

화면 출력

mysql connected!
쿼리성공] insert into members1 (FirstName) select (FirstName) from members
데이터 복사!