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



