MySQL에서 한 테이블의 내용을 동일한 데이터베이스 내의 다른 테이블로 복사하는 방법은 무엇입니까?


118

MySQL을 처음 사용합니다. 한 테이블의 내용을 동일한 데이터베이스 내의 다른 테이블로 복사하고 싶습니다. 기본적으로 다른 테이블의 테이블에 삽입하고 싶습니다. 이 작업을 수행하는 쉬운 방법이 있습니까?

답변:


184

INSERT INTO TARGET_TABLE SELECT * FROM SOURCE_TABLE;

편집 : 또는 테이블의 구조가 다른 경우 다음을 수행 할 수도 있습니다.

INSERT INTO TARGET_TABLE (`col1`,`col2`) SELECT `col1`,`col2` FROM SOURCE_TABLE;

편집 : 이것을 제한하기 위해 ..

INSERT INTO TARGET_TABLE (`col1_`,`col2_`) SELECT `col1`,`col2` FROM SOURCE_TABLE WHERE `foo`=1

누군가이 쿼리를 실행하는 동안 소스 테이블에서 삽입 작업을 수행하려는 경우 어떻게됩니까? 삽입 작업을 잠급니다.
— Lawakush Kurmi

135

테이블이 없으면 다음과 같이 동일한 스키마로 테이블을 만들 수 있습니다.

CREATE TABLE table2 LIKE table1;

그런 다음 데이터를 복사하려면 :

INSERT INTO table2 SELECT * FROM table1

1
이 코드 발견 SELECT * INTO newTable FROM sourceTable에 w3school 가 작동하지 않습니다 이유MySQL
— Kasun Siyambalapitiya

@KasunSiyambalapitiya SELECT ... INTO는 테이블을 출력 파일이나 변수로 내보내는 것을 의미합니다. 테이블에 직접 넣지 않습니다. dev.mysql.com/doc/refman/5.7/en/select-into.html
— Doktor J

@Kasun Siyambalapitiya w3school 페이지는 MySQL 용이 아닌 다른 SQL 용입니다. w3schools에는 이제 오류보고 기능이 있습니다. 문제를 발견하면 정확한 지식을 지원하기 위해 사이트에보고합니다.
— Nightwolf

27

table1이 크고 복사 프로세스 동안 잠그지 않으려면 대신 덤프 및로드를 수행 할 수 있습니다.

CREATE TABLE table2 LIKE table1;

SELECT * INTO OUTFILE '/tmp/table1.txt' FROM table1;
LOAD DATA INFILE '/tmp/table1.txt' INTO TABLE table2;

stackoverflow.com/a/9536680/351903 솔루션을 사용하여 RDS에서 덤프를 시도했습니다 . 파일이 생성되었지만 오랫동안 0 크기로 유지되었습니다. 또한을 확인 show processlist하면 실행중인 쿼리를 볼 수 없습니다. 문제가 무엇인지 확실하지 않습니다.
— Sandeepan Nath

15

이것은 나를 위해 일했습니다.

CREATE TABLE newtable LIKE oldtable;

새 테이블을 이전 테이블로 복제합니다.

INSERT newtable SELECT * FROM oldtable;

모든 행 데이터를 새 테이블에 복사합니다.

감사합니다


10

단일 샷으로 콘텐츠를 만들고 복사하려면 SELECT를 사용하십시오.

CREATE TABLE new_tbl SELECT * FROM orig_tbl;


4
+1-새 테이블에는 첫 번째의 색인 정의가 없습니다. "create ... like ..."접근 방식은 인덱스 정의도 복사합니다.
— Martin

2

이것은 나를 위해 일했습니다. WHERE 및 LIMIT 절을 사용하여 SELECT 문을 더 복잡하게 만들 수 있습니다.

먼저 데이터없이 큰 테이블을 복제하고 다음 쿼리를 실행 한 다음 큰 테이블을 자릅니다.

INSERT INTO table_small (SELECT * FROM table_large WHERE column = 'value' LIMIT 100)

매우 간단합니다. :-)


0
CREATE TABLE target_table SELECT * FROM source_table;

소스 테이블과 동일한 구조로 새 테이블을 생성하고 source_table의 모든 행을 target_table로 복사합니다.

CREATE TABLE target_table SELECT * FROM source_table WHERE condition;

target_table에 복사 할 행이 필요한 경우 where 절에 조건을 적용하십시오.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.