CSV→SQL 변환기(INSERT문 생성)
CSV 파일을 SQL의 INSERT문·CREATE TABLE문으로 변환합니다. MySQL·PostgreSQL·SQLite 3가지 방언을 지원하며, 열의 타입(정수·소수·문자열)을 자동으로 판정합니다. 변환 처리는 모두 브라우저 내에서 이루어지며 데이터는 서버로 전송되지 않습니다.
| 구분자 |
|
|---|---|
| 첫 줄을 헤더로 사용 | |
| 테이블 이름 | |
| SQL 방언 |
|
| CREATE TABLE문도 함께 생성 | |
| 빈 값을 NULL로 처리 | |
| 여러 행을 하나의 INSERT문으로 합치기 |
CSV를 입력하면 생성된 SQL문이 여기에 표시됩니다.
CSV 행과 INSERT문의 대응 관계
| CSV의 한 행 | name,age,city |
|---|---|
| 변환된 INSERT문 | INSERT INTO `my_table` (`name`, `age`, `city`) VALUES ('Alice', 30, 'Tokyo'); |
첫 줄을 헤더로 사용하는 경우, 두 번째 줄부터의 각 행이 헤더의 열 이름을 지정한 하나의 INSERT문으로 변환됩니다. 정수·소수로 인식된 열은 따옴표 없는 숫자로, 그 외의 열은 작은따옴표로 감싼 문자열로 출력됩니다.
팁
- 열의 타입(정수·소수·문자열)은 해당 열의 모든 데이터 행 값을 검사하여 자동으로 판정됩니다. 단 하나라도 숫자가 아닌 값이 있으면 그 열 전체가 문자열 타입으로 처리됩니다.
- "여러 행을 하나의 INSERT문으로 합치기"를 활성화하면 `INSERT INTO ... VALUES (...), (...), (...);` 형태의 단일 문으로 합쳐져, 대량의 데이터를 입력할 때 실행 횟수를 줄일 수 있습니다.
- MySQL은 백틱(`), PostgreSQL·SQLite는 큰따옴표(")로 테이블명·열명을 감싸므로, SQL 방언 선택에 따라 인용 문자가 자동으로 바뀝니다.
- "빈 값을 NULL로 처리"를 비활성화하면, 문자열 타입 열은 빈 문자열('')로, 숫자 타입 열은 NULL로 출력됩니다.
자주 묻는 질문
여담 ― 합쳐진 INSERT문이 "더 빠른" 이유
이 도구로 생성할 수 있는 "여러 행을 하나의 INSERT문으로 합치기"(`INSERT INTO t VALUES (1,'a'), (2,'b'), ...;`)는 행마다 개별 INSERT문을 실행하는 경우보다 실행 속도가 훨씬 빨라질 수 있습니다. 이는 데이터베이스가 각 SQL문을 분석하고 실행 계획으로 변환하는 오버헤드와, 문장 수만큼 반복되는 트랜잭션 커밋 비용을 줄일 수 있기 때문입니다.
다만 MySQL에는 `max_allowed_packet`, PostgreSQL에는 이와 유사한 통신 버퍼 상한이 있어, 너무 많은 행을 하나의 INSERT문에 담으면 그 한도를 초과하여 오류가 발생할 수 있습니다. 실무에서는 수백~수천 행 단위로 문장을 나누는 것이 일반적인 방법입니다.
CSV 파일을 테스트용 데이터베이스에 입력하는 작업은 개발 현장에서 흔히 "시드 데이터 준비(seeding)"라고 불리며, 많은 웹 프레임워크(Laravel의 seeder·factory 등)가 이를 위한 전용 메커니즘을 제공할 정도로 빈번한 작업입니다. 이런 도구는 그런 메커니즘까지 쓸 필요가 없는 소규모 검증이나 데이터 이관 시 빠르게 사용할 수 있는 수단으로 유용합니다.