VillageSQL is a drop-in replacement for MySQL with extensions.
All examples on this page work on VillageSQL. Install Now →
INSERT 하나에 원하는 만큼 많은 행을 실을 수 있습니다. 각 행의 괄호를 쉼표로 구분하세요. 행마다 문 1개를 쓰는 것보다 타이핑이 적고, 서버를 여러 번이 아니라 1번만 오갑니다.
이 예제들은 INSERT의 sakila_practice 데이터베이스를 사용합니다. 시작하기 전에 거기 있는 설정 블록을 다시 실행한 다음, mysql -u root -p sakila_practice로 클라이언트를 여세요.
여러 행 INSERT의 동작 방식
TABLE_NAME을 테이블로, COLUMN_LIST를 값을 제공할 열로, FIRST_ROW_VALUES와 SECOND_ROW_VALUES 각각을 그 열마다 1개씩의 값으로 바꾸세요.
열 목록은 한 번만 쓰고 모든 행을 지배합니다. 각 괄호 묶음은 그 순서대로 값을 제공합니다.
예제
- 문 1개에 행 3개
VALUES 목록과 모든 INSERT SELECT가 여기에 해당합니다. Records는 보낸 행을, Duplicates는 이미 저장된 행과 충돌한 행을, Warnings는 서버가 조정해야 했던 것을 셉니다. 3개의 숫자가 모두 보낸 것과 일치하면 조용히 바뀐 것이 없다는 표시입니다.
잘못된 행 하나가 문 전체를 버립니다
아래 문은 3개의 행을 싣고 있습니다. 가운데 행은 Mary Smith의 주소를 다시 쓰는데,email의 UNIQUE 인덱스가 그것을 거부합니다.
INSERT IGNORE는 오류를 경고로 바꿉니다
INSERT IGNORE는 넣을 수 있는 행은 넣고 나머지는 건너뜁니다.
Records: 2 Duplicates: 1은 일어난 일을 정확히 보고합니다: 2개의 행을 제시했고, 1개가 거부되었습니다. 그다음 SHOW WARNINGS가 그것을 지목하고, 같은 ERROR 1062 텍스트가 실패가 아니라 경고로 도착합니다.
IGNORE를 사용하세요. 그 밖의 경우에는 무딘 도구인데, 열에 비해 너무 긴 값과 필수 열에 값이 없는 행을 포함해 다른 오류도 함께 격하시키기 때문입니다. 모든 INSERT IGNORE 뒤에 SHOW WARNINGS를 실행하세요. 그렇지 않으면 무엇을 버렸는지 알 수 없습니다. 올바른 답이 이미 저장된 행을 갱신하는 것이라면 대신 upsert를 사용하세요.
요약
- 각 행의 괄호를 쉼표로 구분하고, 열 목록은 한 번만 쓰세요.
Records,Duplicates,Warnings를 읽어 조정된 것이 없음을 확인하세요.- 거부된 행 1개가 문장 전체를 중단시켜 아무것도 쓰이지 않습니다.
- 좋은 행을 남기려면
INSERT IGNORE를 사용하고, 그 뒤에SHOW WARNINGS를 읽으세요. - 단일 행 문 여러 개보다 여러 행 문 1개를 쓰세요.
함께 보기
- INSERT — 단일 행 형태와 그것이 내는 오류
- INSERT SELECT — 쿼리에서 가져온 행
- Upsert — 건너뛰는 대신 기존 행 갱신
- MySQL의 대량 삽입 — 배치 크기, LOAD DATA, 그리고 중요한 설정