• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.6 한글메뉴얼) [close]
  • 1. MySQL 5.6 새로운 기능
  • 2. MySQL 설치 및 업그레이드
  • 3. MySQL Tutorial
  • 4. MySQL 프로그램
  • 5. MySQL 서버관리
  • 6. 보안
  • 7. 백업 및 복구
  • 8. 최적화
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 1. 데이터 정의 문
    2. 데이터 조작 문
    1. CALL 구문
    2. DELETE 구문
    3. DO 구문
    4. HANDLER 구문
    5. INSERT 구문
    1. INSERT ... SELECT 구문
    2. INSERT DELAYED 구문
    3. INSERT ... ON DUPLICATE KEY UPDATE 구문
    6. LOAD DATA INFILE 구문
    7. LOAD XML 구문
    8. REPLACE 구문
    9. SELECT 구문
    10. 서브 쿼리 구문
    11. UPDATE 구문
    3. MySQL 트랜잭션과 잠금 문
    4. 복제 문
    5. Prepared Statements위한 SQL 구문
    6. MySQL 복합문 구문
    7. 데이터베이스 관리 문
    8. MySQL 유틸리티 문
  • 14. InnoDB 스토리지 엔진
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

13.2.5.1 INSERT ... SELECT 구문

INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name 
    [PARTITION (partition_name,...)]
    [(col_name,...)]
    SELECT ...
    [ ON DUPLICATE KEY UPDATE col_name=expr, ... ]

INSERT ... SELECT 를 사용하면 하나 또는 다수의 테이블에서 많은 행을 테이블에 빠르게 삽입 할 수 있습니다. 예 :

 INSERT INTO tbl_temp2 (fld_id)
   SELECT tbl_temp1.fld_order_id
   FROM tbl_temp1 WHERE tbl_temp1.fld_order_id> 100;

INSERT ... SELECT 문에는 다음 조건이 적용됩니다.

  • 중복 키 위반의 원인이되는 행을 무시하려면 IGNORE 를 지정합니다.

  • DELAYED 는 INSERT ... SELECT 는 무시됩니다.

  • INSERT 문의 대상 테이블이 쿼리의 SELECT 부분의 FROM 절에 나타나도 괜찮습니다. (이것은 일부 이전 버전의 MySQL에서는 불가능했습니다.) 그러나 테이블에 삽입하고, 하위 쿼리 같은 테이블에서 선택 할 수 없습니다.

    테이블에서 선택과 테이블에 삽입을 동시에 할 경우, MySQL은 SELECT 에서 행을 유지하기 위해 임시 테이블을 생성하고 그 행을 목표 테이블에 삽입합니다. 그러나 TEMPORARY 테이블을 동일한 명령문에서 두 번 참조 할 수 없기 때문에 t 가 TEMPORARY 테이블의 경우 INSERT INTO t ... SELECT ... FROM t 을 사용할 수없는 점은 계속 남아 있습니다 ( 섹션 B.5.7 .2 "TEMPORARY 테이블 문제" 를 참조하십시오).

  • AUTO_INCREMENT 컬럼은 정상적으로 작동합니다.

  • 바이너리 로그를 사용하여 원래의 테이블을 확실히 재 작성할 수 있도록하기 위해, MySQL은 INSERT ... SELECT 문에서 병렬 삽입이 허용되지 않습니다.

  • SELECT 와 INSERT 가 같은 테이블을 참조하는 경우 모호한 컬럼 참조 문제를 해결하려면 SELECT 부분에서 사용되는 각 테이블의 고유 한 별칭을 지정하고 해당 부분에있는 컬럼 이름을 적절 별칭으로 한정합니다.

MySQL 5.6.2에서 테이블의 이름을 따르는 PARTITION 옵션에서 소스 또는 대상 테이블 (또는 둘 다) 목의 파티션 또는 서브 파티션 (또는 둘 다)을 사용할지 여부를 명시 적으로 선택할 수 있습니다. PARTITION 이 문 SELECT 부분에있는 소스 테이블의 이름과 함께 사용되는 경우 해당 파티션 목록에 지정된 파티션 또는 서브 파티션의 행만 선택됩니다. PARTITION 이 문 INSERT 부분 대상 테이블의 이름과 함께 사용되는 경우는 선택된 모든 행을이 옵션 다음에 나오는 파티션 목록에 지정된 파티션 또는 서브 파티션에 삽입 할 수 있어야합니다. 그렇지 않은 경우, INSERT ... SELECT 문은 실패합니다. 자세한 내용 및 예제는 섹션 19.5 "파티션 선택" 을 참조하십시오.

ON DUPLICATE KEY UPDATE 값의 부분에서는 SELECT 부분에서 GROUP BY 를 사용하지 않는 한, 다른 테이블의 컬럼을 참조 할 수 있습니다. 하나의 부작용으로 값 부분에있는 고유하지 않은 컬럼 이름을 규정해야 할 점이 있습니다.

ORDER BY 절이없는 SELECT 문이 행을 반환 순서는 특정되지 않습니다. 즉, 복제를 사용하는 경우 이러한 SELECT 가 마스터와 슬레이브에서 행을 같은 순서로 반환 보장은 없습니다. 따라서 마스터와 슬레이브 사이에 불일치가 발생할 수 있습니다. 이것이 발생하지 않도록하기 위해 복제 된 INSERT ... SELECT 문은 항상 INSERT ... SELECT ... ORDER BY column 으로 설명하도록하십시오. column 의 선택은 마스터와 슬레이브에서 확실히 행이 동일한 순서로 반환 한 문제가되지 않습니다. 섹션 17.4.1.16 "복제 및 LIMIT" 도 참조하십시오.

이 문제 때문에, MySQL 5.6.4에서 INSERT ... SELECT ON DUPLICATE KEY UPDATE 및 INSERT IGNORE ... SELECT 문에는 문 기반 복제는 안전하지 않은 플래그가 지정됩니다. 이러한 변경으로 인해 이러한 문은 명령문 기반 모드를 사용하는 경우에는 로그에 경고를 생성하고 MIXED 모드를 사용하는 경우 행 기반 형식을 사용하여 기록됩니다. (Bug # 11758262, B​​ug # 50439)

섹션 17.1.2.1 "문 기반 및 열 기반 리플리케이션의 장점과 단점" 을 참조하십시오.

MySQL 5.6.6 이전에는 테이블 수준의 잠금을 채용 한 MyISAM 등의 스토리지 엔진을 사용하여 파티션 된 테이블에서 작동하는 INSERT ... SELECT 문을 사용하여 소스 및 대상 테이블의 모든 파티션이 잠겨있었습니다. (이것은 행 레벨 락을 채용 한 InnoDB 등의 스토리지 엔진을 사용하는 테이블에서는 발생하지 않았고 현재도 발생하지 않습니다.) MySQL 5.6.6 이후에서는 대상 테이블의 모든 파티션이 잠금 하지만 소스 테이블은 실제로 읽은 파티션 만 고정됩니다. 자세한 내용은 섹션 19.6.4 "파티셔닝 및 잠금" 을 참조하십시오.

서울시 강남구 영동대로 602 6층
TEL: 02-6061-0006  /  E: csr@mysqlkorea.com
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved