Mastering MySQL INSERT: 효율적인 데이터 삽입 기법
Wenhao Wang
Dev Intern · Leapcell

Key Takeaways
INSERT
문은 단일, 다중 및 쿼리 기반 데이터 삽입을 지원합니다.IGNORE
및ON DUPLICATE KEY UPDATE
를 사용하여 실행 중단 없이 충돌을 관리합니다.- 배치 삽입 및
LOAD DATA INFILE
은 대규모 데이터 세트의 성능을 향상시킵니다.
MySQL INSERT
문은 테이블에 새 레코드를 추가하는 데 사용되는 기본적인 SQL 명령어입니다. 단일 행 삽입부터 대량 작업 및 테이블 간 데이터 전송에 이르기까지 다양한 데이터 삽입 요구 사항을 수용하기 위해 다양한 구문을 지원합니다.
1. 기본 구문
a. 단일 행 삽입
테이블에 단일 행을 삽입하려면 테이블 이름, 채울 열 및 해당 값을 지정합니다.
INSERT INTO table_name (column1, column2, column3) VALUES (value1, value2, value3);
모든 열에 값을 삽입하고 정확한 순서를 알고 있는 경우 열 목록을 생략할 수 있습니다.
INSERT INTO table_name VALUES (value1, value2, value3);
그러나 명확성과 유지 관리 용이성을 위해 열 이름을 지정하는 것이 가장 좋습니다.
2. 다중 행 삽입
MySQL에서는 단일 INSERT
문으로 여러 행을 삽입할 수 있습니다. 이는 여러 개의 단일 행 삽입보다 효율적입니다.
INSERT INTO table_name (column1, column2) VALUES (value1a, value2a), (value1b, value2b), (value1c, value2c);
각 값 집합은 삽입될 행을 나타냅니다. 이 방법은 명령문의 수를 줄이고 특히 대규모 데이터 세트를 처리할 때 성능을 향상시킬 수 있습니다.
3. 다른 테이블에서 데이터 삽입
다른 테이블의 쿼리를 기반으로 테이블에 데이터를 삽입하려면 INSERT INTO ... SELECT
구문을 사용합니다.
INSERT INTO target_table (column1, column2) SELECT column1, column2 FROM source_table WHERE condition;
이 방법은 데이터를 복제하거나 유사한 구조를 가진 테이블 간에 데이터를 전송하는 데 유용합니다.
4. 기본값 처리
데이터를 삽입할 때 MySQL이 특정 열에 기본값을 할당하도록 할 수 있습니다.
-
INSERT
문에서 열과 해당 값을 생략합니다. -
DEFAULT
키워드를 명시적으로 사용합니다.INSERT INTO table_name (column1, column2) VALUES (value1, DEFAULT);
이렇게 하면 기본값이 있는 열이 수동 지정 없이 적절하게 채워집니다.
5. SET
구문 사용
단일 행을 삽입하는 대체 구문은 열에 값을 직접 할당하는 SET
절을 사용하는 것입니다.
INSERT INTO table_name SET column1 = value1, column2 = value2;
이 형식은 특히 많은 열을 처리할 때 가독성을 향상시킬 수 있지만 단일 행 삽입으로 제한됩니다.
6. 중복 항목 관리
삽입이 고유 제약 조건을 위반할 수 있는 시나리오를 처리하려면 다음을 수행하십시오.
-
INSERT IGNORE
: 전체 작업 중단 없이 중복 키 오류를 일으킬 수 있는 행을 건너뜁니다.INSERT IGNORE INTO table_name (column1, column2) VALUES (value1, value2);
-
INSERT ... ON DUPLICATE KEY UPDATE
: 중복 키 오류가 발생하면 기존 행을 대신 업데이트합니다.INSERT INTO table_name (column1, column2) VALUES (value1, value2) ON DUPLICATE KEY UPDATE column2 = value2;
이러한 방법은 삽입 작업 중에 데이터 무결성을 유지하는 데 유연성을 제공합니다.
7. 성능 고려 사항
대량의 데이터를 삽입할 때:
-
일괄 삽입: 오버헤드를 줄이기 위해 단일
INSERT
문에 여러 행을 그룹화합니다. -
LOAD DATA INFILE
: 파일에서 대량 데이터를 로드하는 경우 이 명령은 높은 성능을 제공합니다.LOAD DATA INFILE 'file_path' INTO TABLE table_name FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';
-
max_allowed_packet
조정: MySQL 서버의max_allowed_packet
설정이 큰 삽입 문을 처리하기에 충분한지 확인합니다.SHOW VARIABLES LIKE 'max_allowed_packet'; SET GLOBAL max_allowed_packet = size_in_bytes;
이러한 측면을 적절히 관리하면 데이터 삽입 프로세스의 효율성을 크게 향상시킬 수 있습니다.
결론
다양한 형태의 MySQL INSERT
문을 마스터하면 효율적이고 유연한 데이터 관리가 가능합니다. 단일 행, 여러 레코드를 삽입하거나 테이블 간에 데이터를 전송하든 이러한 기술을 이해하는 것은 효과적인 데이터베이스 작업에 필수적입니다.
FAQs
INSERT
는 중복 키와 같은 오류가 발생하면 중지합니다. INSERT IGNORE
는 오류를 건너뛰고 나머지 삽입을 계속합니다.
특히 조건부로 행을 복제하거나 마이그레이션하기 위해 다른 테이블에서 데이터를 삽입할 때 사용합니다.
일괄 삽입은 일반적으로 더 효율적이며 특히 대규모 작업의 경우 서버 오버헤드를 줄입니다.
저희는 백엔드 프로젝트 호스팅을 위한 최고의 선택, Leapcell입니다.
Leapcell은 웹 호스팅, 비동기 작업 및 Redis를 위한 차세대 서버리스 플랫폼입니다.
다국어 지원
- Node.js, Python, Go 또는 Rust로 개발합니다.
무료로 무제한 프로젝트 배포
- 사용량에 따라서만 지불합니다. 요청도 없고, 요금도 없습니다.
최고의 비용 효율성
- 유휴 요금 없이 사용한 만큼 지불합니다.
- 예: $25로 평균 응답 시간 60ms에서 694만 건의 요청을 지원합니다.
간소화된 개발자 경험
- 간편한 설정을 위한 직관적인 UI.
- 완전 자동화된 CI/CD 파이프라인 및 GitOps 통합.
- 실행 가능한 통찰력을 위한 실시간 메트릭 및 로깅.
간편한 확장성 및 고성능
- 고도의 동시성을 쉽게 처리하기 위한 자동 확장.
- 운영 오버헤드가 제로이므로 구축에만 집중하세요.
설명서에서 자세히 알아보세요!
X에서 저희를 팔로우하세요: @LeapcellHQ