[MySQL & PHP] 7장 테이블과 레코드 복사∙삭제하기

MySQL & PHP 학습/정리 그리고 체크! 2015. 12. 21. 01:06

728x90
반응형

정리

1. 다른 테이블의 칼럼 구조와 데이터를 복사해서 테이블 생성하기


먼저, SELECT한 결과에서 칼럼 구조와 레코드를 복사하고 나서 새로운 테이블을 생성하는 방법입니다. 데이터와 테이블을 간단하게 복사할 수 있는 편리한 방법입니다.


단, 이 방법은 AUTO_INCREMENT 등 일부 속성은 복사할 수 없습니다. AUTO_INCREMENT 등의 속성은 복사하고 나서 다시 설정해야 합니다.


테이블의 칼럼 구조와 레코드를 복사해서 테이블 생성하기

CREATE TABLE 새로운_테이블_이름 SELECT * FROM  복사할_테이블_이름;


사원정보 테이블 tb1의 백업 테이블을 만들어 보겠습니다. 테이블 tb1의 칼럼 구조와 레코드를 복사해서 테이블 tb1H를 만듭니다.



create table tb1H select * from tb1;

새로운 테이블 tb1H를 만드는데 테이블 tb1의 모든 칼럼, 모든 레코드를 그대로 가져오겠습니다.


select tb1H;

선택한 tb1H 의 모든 칼럼의 데이터를 표시합니다.


참고로, 이 방법을 이용하면 칼럼의 속성이 변경될 수 있습니다. 예를 들어, MySQL의 버전에 따라서는 VARCHAR(100)형으로 설정한 속성이 CHAR(100)형으로 변경될 수도 있습니다. 또한, 이 외에도 INDEX 설정이 삭제되기도 합니다. 복사하고 나서 DESC 명령으로 구조를 확인하고 이용하도록 합니다.

2. 다른 테이블의 칼럼 구조를 복사해서 테이블 생성하기


테이블의 칼럼 구조만 복사해서 새로운 테이블을 만드는 방법입니다. 이 방법을 이용하면 데이터는 복사하지 않고, AUTO_INCREMENT와 PRIMARY KEY 등의 칼럼 구조만 복사할 수 있습니다.


테이블의 칼럼 구조만 복사해서 새로운 테이블 만들기

CREATE TABLE 새로운_테이블_이름 LIKE 복사할_테이블_이름;


사원정보 테이블 tb1과 같은 칼럼 구조를 가진 테이블 tb1I를 만들어 보겠습니다.



create table tb1I like tb1;

새로운 테이블 tb1I를 만드는데 테이블 tb1의 칼럼 구조만 복사하겠습니다.


desc tb1I;

테이블 tb1I의 칼럼 구조를 표시합니다.

(스샷에서는 tb1 로 오타가 있습니다. tb1I로 입력해 주시기 바랍니다.)


이 방법을 이용하면 AUTO_INCREMENT와 PRIMARY KEY 속성도 복사할 수 있습니다. 내용물 없이 그릇만 복사하는 방법입니다.


3. 다른 테이블의 레코드 복사하기


이번에는 이미 만들어진 테이블에 다른 테이블의 레코드(데이터)만 복사하는 방법입니다.

같은 칼럼 구조를 가진 테이블의 데이터를 통째로 복사하려면 다음 명령을 사용합니다.


다른 테이블의 레코드 복사하기

INSERT INTO 테이블_이름 SELECT * FROM 복사할_테이블_이름;


방금전 테이블 tb1과 같은 구조를 가진 빈 테이블 tb1I를 만들었습니다. 이 테이블에 테이블 tb1I의 모든 레코드를 복사해 보겠습니다.



insert into tb1I select * from tb1;

테이블 tb1I 에 테이블 tb1의 모든 데이터를 복사합니다.


select * from tb1I;

tb1I의 모든 칼럼의 데이터를 표시합니다.


특정 칼럼을 선택해서 복사하기

특정칼럼의 데이터를 선택해서 복사할 수도 있습니다. 예를 들어, 다음은 테이블 tb1I의 칼럼 name에 테이블 tb1의 칼럼  number에 저장된 데이터를 삽입하는 예입니다.



insert into tb1I (name) select number * from tb1;

테이블 tb1I의 name 칼럼에 테이블 tb1의 칼럼 중 number 칼럼의 모든 데이터를 넣어주겠습니다.


select * from tb1I;

tb1I의 모든 칼럼의 데이터를 표시합니다.


여기에서는 칼럼 name과 number는 둘 다 자료형이 VARCHAR(10)형이기 때문에 아무 문제 없이 실행되었습니다. 자료형이 다른 칼럼에서 데이터를 복사하게 되면 실패할 수도 있습니다.


4. 테이블과 데이터베이스, 레코드를 간단하게 삭제하기


지금부터 데이터베이스와 테이블, 레코드를 통째로 삭제하는 방법을 설명하겠습니다. 단, 어떤 정보도 한번 삭제하면 원래대로 되돌릴 수 없습니다. 따라서 DROP이나 DELETE 명령을 실행할 때에는 신중을 기해야 합니다.


테이블 삭제하기

DROP TABLE 테이블_이름;


테이블 tb1A를 삭제해 보겠습니다. 그리고 삭제하고 나서 모든 테이블 이르을 표시해 보겠습니다.



drop table tb1A;

테이블 tb1A를 삭제하겠습니다.


show tables;

모든 테이블을 표시합니다.


DROP 명령은 한번 실행하면 원래대로 되돌릴 수 없어서 이 명령을 실행할 때에는 신중해야 합니다.


삭제하고자 하는 테이블이 있을 때 삭제하기

DROP TABLE IF EXISTS 테이블_이름;


보통 삭제하고자 하는 테이블이 없는 상태에서 DROP 명령을 실행하면 오류가 표시되지만, IF EXISTS를 사용하면 오류를 피할 수 있습니다.



데이터베이스 삭제하기

데이터베이스를 삭제할 때에도 DROP 명령을 사용합니다. 예를 들어, DROP DATABASE db0;이라는 명령을 실행하면, 데이터베이스 db0이 삭제됩니다.


데이터베이스 삭제하기

DROP DATABASE 데이터베이스_이름;


이 명령은 한번 실행하면 데이터베이스를 원래대로 되돌릴 수 없습니다. 테이블을 포함한 모든 정보가 삭제되기 때문에 이 명령을 사용할 때에는 주의해야 합니다.


모든 레코드 삭제하기

테이블 자체는 삭제하지 않고 테이블에 저장된 레코드(데이터)만 삭제하는 방법입니다.


모든 레코드 삭제하기

DELETE FROM 테이블_이름;


DELETE FROM 테이블_이름;이라는 명령을 실행하면 테이블에 있는 모든 레코드가 삭제됩니다.


테이블 tb1H의 모든 레코드를 삭제해 보겠습니다.



delete from tb1H;

테이블 tb1H의 모든 칼럼의 데이터를 삭제하겠습니다.


select * from tb1H;

테이블 tb1H의 모든 칼럼의 데이터를 표시하겠습니다.


SELECT를 실행하면 'Empty set'이라고 표시되어 레코드가 모두 삭제된 것을 확인할 수 있습니다.




체크!

★ CREATE TABLE ... SELECT ... 명령으로 칼럼 구조와 데이터를 복사해서 테이블을 생성할 수 있다.

★ CREATE TABLE ... LIKE ... 명령으로 칼럼 구조만 복사해서 테이블을 생성할 수 있다.

★ INSERT INTO ... SELECT ... FROM ... 명령으로 다른 테이블에 데이터를 복사할 수 있다.

★ DROP 명령을 사용해서 데이터베이스와 테이블, 레코드를 삭제할 수 있다.


반응형