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문으로 변환됩니다. 정수·소수로 인식된 열은 따옴표 없는 숫자로, 그 외의 열은 작은따옴표로 감싼 문자열로 출력됩니다.
CSV→SQL 변환(INSERT문 생성)이란
손에 있는 CSV를 데이터베이스에 그대로 넣고 싶을 때, 행마다 INSERT문을 직접 작성하는 것은 현실적이지 않습니다. 이 도구는 CSV를 읽어 각 행을 INSERT문으로 자동 변환합니다. 열의 타입은 모든 데이터 행을 살펴본 뒤 정수·소수·문자열 중 하나로 판정하므로, CREATE TABLE문까지 함께 생성할 수 있습니다.
MySQL·PostgreSQL·SQLite 3가지 방언을 지원하며, 선택한 방언에 따라 식별자를 감싸는 인용 문자와 타입명이 자동으로 바뀝니다. 값에 포함된 작은따옴표는 SQL 표준 방식으로 자동 이스케이프되므로 생성된 문장을 그대로 실행할 수 있습니다. 모든 처리는 브라우저 안에서 완결되며, CSV 내용이 외부로 전송되는 일은 없습니다.
CSV에서 INSERT문을 만드는 방법
- CSV를 붙여넣습니다 입력란에 CSV를 붙여넣습니다. 탭으로 구분된 데이터라면 구분자를 탭으로 변경해 주세요.
- 테이블 이름과 방언을 지정합니다 데이터를 넣을 테이블 이름을 입력하고, 사용할 데이터베이스의 방언을 선택합니다. 식별자를 감싸는 인용 문자가 자동으로 전환됩니다.
- 출력 형식을 선택합니다 CREATE TABLE문을 함께 생성할지, 빈 값을 NULL로 처리할지, 여러 행을 하나의 INSERT문으로 합칠지를 지정합니다.
- 복사해서 실행합니다 생성된 SQL을 복사하여 데이터베이스 클라이언트에 붙여넣고 실행합니다. 행 수가 많다면 나눠서 실행하는 것이 좋습니다.
더 잘 활용하기 위한 팁
- 열의 타입(정수·소수·문자열)은 해당 열의 모든 데이터 행 값을 검사하여 자동으로 판정됩니다. 단 하나라도 숫자가 아닌 값이 있으면 그 열 전체가 문자열 타입으로 처리됩니다.
- "여러 행을 하나의 INSERT문으로 합치기"를 활성화하면 `INSERT INTO ... VALUES (...), (...), (...);` 형태의 단일 문으로 합쳐져, 대량의 데이터를 입력할 때 실행 횟수를 줄일 수 있습니다.
- MySQL은 백틱(`), PostgreSQL·SQLite는 큰따옴표(")로 테이블명·열명을 감싸므로, SQL 방언 선택에 따라 인용 문자가 자동으로 바뀝니다.
- "빈 값을 NULL로 처리"를 비활성화하면, 문자열 타입 열은 빈 문자열('')로, 숫자 타입 열은 NULL로 출력됩니다.
CSV→SQL 변환 활용 사례
테스트용 시드 데이터를 준비할 때
표 계산 프로그램으로 만든 검증용 데이터를 그대로 INSERT문으로 변환할 수 있습니다. 프레임워크의 시더를 따로 작성하기 부담스러운 소규모 검증에 적합합니다.
마스터 데이터를 이관할 때
기존 시스템에서 내보낸 CSV를 새 데이터베이스에 넣을 수 있는 형태로 변환합니다. CREATE TABLE문도 함께 얻을 수 있어 이관 준비 시간을 줄여 줍니다.
열의 타입을 점검할 때
자동으로 판정된 타입을 확인하면 예상치 못한 값이 섞인 열을 쉽게 찾아낼 수 있습니다. 숫자여야 할 열이 문자열 타입으로 판정되었다면 데이터가 오염되었다는 신호입니다.
방언별 문법 차이를 비교할 때
같은 CSV를 두고 방언만 바꿔 보면 식별자 인용 문자나 타입명의 차이를 실제 예시로 비교해 볼 수 있습니다.
SQL 입력 관련 용어
- INSERT문
- 테이블에 새 행을 추가하는 SQL 명령입니다. 열 이름과 값을 짝지어 지정합니다.
- CREATE TABLE문
- 테이블을 새로 만드는 SQL 명령으로, 열 이름과 타입을 정의합니다. 데이터를 넣을 테이블이 아직 없을 때 필요합니다.
- SQL 방언(dialect)
- 데이터베이스 제품마다 다른 SQL 문법 차이를 말합니다. 식별자를 감싸는 기호나 타입명의 표기가 서로 다릅니다.
- NULL
- 값이 존재하지 않음을 나타내는 특별한 값입니다. 빈 문자열과는 다른 개념이므로 빈 값을 어떻게 처리할지 결정해야 합니다.
- 이스케이프(escape)
- 문법상 특별한 의미를 가진 문자를 있는 그대로의 문자로 처리하게 만드는 작업입니다. 값에 포함된 작은따옴표가 대표적인 대상입니다.
- 벌크 인서트
- 여러 행을 하나의 INSERT문에 모아 한 번에 입력하는 방식입니다. 문장 분석과 커밋 횟수가 줄어 실행 속도가 빨라집니다.
자주 묻는 질문
여담 ― 합쳐진 INSERT문이 "더 빠른" 이유
이 도구로 생성할 수 있는 "여러 행을 하나의 INSERT문으로 합치기"(`INSERT INTO t VALUES (1,'a'), (2,'b'), ...;`)는 행마다 개별 INSERT문을 실행하는 경우보다 실행 속도가 훨씬 빨라질 수 있습니다. 이는 데이터베이스가 각 SQL문을 분석하고 실행 계획으로 변환하는 오버헤드와, 문장 수만큼 반복되는 트랜잭션 커밋 비용을 줄일 수 있기 때문입니다.
다만 MySQL에는 `max_allowed_packet`, PostgreSQL에는 이와 유사한 통신 버퍼 상한이 있어, 너무 많은 행을 하나의 INSERT문에 담으면 그 한도를 초과하여 오류가 발생할 수 있습니다. 실무에서는 수백~수천 행 단위로 문장을 나누는 것이 일반적인 방법입니다.
CSV 파일을 테스트용 데이터베이스에 입력하는 작업은 개발 현장에서 흔히 "시드 데이터 준비(seeding)"라고 불리며, 많은 웹 프레임워크(Laravel의 seeder·factory 등)가 이를 위한 전용 메커니즘을 제공할 정도로 빈번한 작업입니다. 이런 도구는 그런 메커니즘까지 쓸 필요가 없는 소규모 검증이나 데이터 이관 시 빠르게 사용할 수 있는 수단으로 유용합니다.