메인 콘텐츠로 건너뛰기

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. 문 1개에 행 3개

두 번째 줄은 문이 1개보다 많은 행을 쓸 수 있을 때마다 나타나는데, 여러 행 VALUES 목록과 모든 INSERT SELECT가 여기에 해당합니다. Records는 보낸 행을, Duplicates는 이미 저장된 행과 충돌한 행을, Warnings는 서버가 조정해야 했던 것을 셉니다. 3개의 숫자가 모두 보낸 것과 일치하면 조용히 바뀐 것이 없다는 표시입니다.
id는 행을 쓴 순서대로 이어집니다.

잘못된 행 하나가 문 전체를 버립니다

아래 문은 3개의 행을 싣고 있습니다. 가운데 행은 Mary Smith의 주소를 다시 쓰는데, email의 UNIQUE 인덱스가 그것을 거부합니다.
나머지 2개의 행도 들어가지 않았습니다.
문 하나는 전부 아니면 전무이므로, 잘못된 값 1개가 있는 10,000개 행의 배치는 아무것도 쓰지 않습니다. 전부 아니면 전무라는 것은 큰 배치는 보내기 전에 데이터를 검사해야 한다는 뜻이기도 한데, 서버는 문제가 되는 행 1개를 지목하고 멈추기 때문입니다.

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개를 쓰세요.

함께 보기