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 sourceTablew3school 가 작동하지 않습니다 이유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.