MySQL에서 테이블 복사하는 방법에 대해 알아보기

MySQL에서 테이블 복사하는 방법에 대해 알아보기

MySQL에서 테이블을 복사하는 방법과 주의점에 대한 블로그입니다.
Clock Icon2023.03.18 14:26

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

안녕하세요 DA사업본부 송영진입니다.

오늘은 MySQL에서 테이블을 복사하는 방법과 주의할 점에 대한 포스트를 써보려고 합니다.

테이블을 복사하는 방법은 보편적으로 두 가지 방법을 사용합니다.

  • SELECT를 사용한 데이터 복사만으로 테이블 생성
  • LIKE를 사용하여 같은 구조의 테이블 생성 및 데이터 INSERT

다음과 같은 테이블을 이용하여 어떤 차이점이 있는지 실제로 쿼리를 실행해보며 알아보겠습니다.

id name
1 aaa
2 bbb
3 ccc
4 ddd
5 eee

테이블 정의는 다음과 같습니다.

CREATE TABLE test 
(
    id INTEGER NOT NULL AUTO_INCREMENT,
    name VARCHAR(100),
    primary key(id)
);

AUTO_INCREAMENT 설정이 되어있는 테이블에 데이터가 5건 들어있으니 현재의 AUTO_INCREMENT의 값은 6이 됩니다. 다음과 같은 쿼리로 확인이 가능합니다.

SELECT 
    AUTO_INCREMENT 
FROM 
    information_schema.tables 
WHERE 
    TABLE_NAME = 'test';

데이터 복사로 테이블 생성

자 이제 SELECT를 사용한 데이터 복사만으로 테이블 생성 방법을 사용하여 테이블을 만들어보고 테이블의 정의가 어떻게 되었는지 확인해보겠습니다.

사용할 SQL은 다음과 같습니다.

CREATE TABLE test2 AS SELECT * FROM test;

확인으로 사용하는 SQL은 다양한 방법이 있습니다. SHOW CREATE TABLE을 사용하는 방법, DESC를 사용하는 방법입니다. 결과를 확인해보겠습니다.

그렇습니다 PRIMARY KEY와 AUTO_INCREMENT가 사라져버렸습니다... 테이블의 SELECT한 결과로 만들었다보니까 당연하긴 한 결과인데 이렇게 만든 테이블은 백업으로서 사용하기는 적당하지 않습니다.

그렇다면 다른 방법은 어떨까요?

같은 구조의 테이블 생성 및 데이터 삽입

이번엔 LIKE를 사용하여 같은 구조의 테이블 생성 및 데이터 INSERT를 사용하여 테이블을 생성해보겠습니다.

사용할 SQL은 다음과 같습니다.

CREATE TABLE test3 LIKE test
INSERT INTO test3 SELECT * FROM test;

다시 생성한 테이블을 확인해보겠습니다.

PRIMARY KEY 정보와 AUTO_INCREMENT가 살아있습니다!!

테이블을 복사해서 AUTO_INCREMENT가 똑같이 6이 되어있는 것을 확인했는데요, 이 때 6이 되는 시점은 언제일까요? 테이블을 생성했을 때 오리지널 테이블의 값을 그대로 가져오나? 아니면 데이터를 삽입하는 시점에 증가하는 걸까요? 다시 테이블을 생성하면서 중간중간 AUTO_INCREMENT의 값을 다시 확인해보겠습니다.

테이블이 생성된 시점에서는 1로 초기화되고 데이터 5건이 삽입되었을 때 AUTO_INCREMENT의 값이 5 증가하게 되네요. 따라서 다음에 삽입되는 데이터의 AUTO_INCREMENT의 값은 6이 되겠습니다!

마지막으로

MySQL에서 테이블을 복사하는 두 가지 방법에 대해서 알아보았습니다. 복사한 테이블을 백업으로서 사용하고 싶은 경우에는 테이블 구조까지 같이 복사할 필요가 있으므로 LIKE를 사용하여 복사하는 편이 좋을 것 같습니다. 사실 이번 블로그는 제가 테이블을 데이터 복사로 생성한 테이블을 백업으로 쓰다가 기본키가와 AUTO_INCREMENT가 사라져있어서 문제가 있었기 때문에 적은 블로그입니다.

딱히 MySQL에서만 적용되는 이야기만은 아니라 다양한 데이터베이스에서 같은 케이스가 있을 것 같네요. 다른 분들께도 도움이 되었으면 좋겠습니다!

この記事をシェアする

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.