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문을 만드는 방법

  1. CSV를 붙여넣습니다 입력란에 CSV를 붙여넣습니다. 탭으로 구분된 데이터라면 구분자를 탭으로 변경해 주세요.
  2. 테이블 이름과 방언을 지정합니다 데이터를 넣을 테이블 이름을 입력하고, 사용할 데이터베이스의 방언을 선택합니다. 식별자를 감싸는 인용 문자가 자동으로 전환됩니다.
  3. 출력 형식을 선택합니다 CREATE TABLE문을 함께 생성할지, 빈 값을 NULL로 처리할지, 여러 행을 하나의 INSERT문으로 합칠지를 지정합니다.
  4. 복사해서 실행합니다 생성된 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문에 모아 한 번에 입력하는 방식입니다. 문장 분석과 커밋 횟수가 줄어 실행 속도가 빨라집니다.

자주 묻는 질문

해당 열에 포함된 모든 데이터 행의 값을 검사하여, 전부 정수 표기이면 INTEGER 타입, 전부 소수 표기이면 REAL 타입, 그 외(문자열이나 혼합)는 TEXT 타입으로 자동 판정합니다. CREATE TABLE문을 생성할 경우 이 판정 결과가 그대로 열의 타입으로 출력됩니다.

네. "SQL 방언"에서 PostgreSQL 또는 SQLite를 선택하면, 테이블명·열명의 인용 문자(큰따옴표)와 타입명이 각 데이터베이스에 맞는 형식으로 출력됩니다.

SQL 표준 이스케이프 방식에 따라 작은따옴표가 자동으로 2개('')로 변환되므로, 그대로 SQL문으로 실행할 수 있습니다.

아니요. 변환 처리는 모두 브라우저 내 자바스크립트에서 이루어지며, 입력한 CSV 내용이 서버로 전송되는 일은 없습니다. 실제 데이터가 포함된 CSV도 안심하고 사용할 수 있습니다.
툴군

여담 ― 합쳐진 INSERT문이 "더 빠른" 이유

이 도구로 생성할 수 있는 "여러 행을 하나의 INSERT문으로 합치기"(`INSERT INTO t VALUES (1,'a'), (2,'b'), ...;`)는 행마다 개별 INSERT문을 실행하는 경우보다 실행 속도가 훨씬 빨라질 수 있습니다. 이는 데이터베이스가 각 SQL문을 분석하고 실행 계획으로 변환하는 오버헤드와, 문장 수만큼 반복되는 트랜잭션 커밋 비용을 줄일 수 있기 때문입니다.

다만 MySQL에는 `max_allowed_packet`, PostgreSQL에는 이와 유사한 통신 버퍼 상한이 있어, 너무 많은 행을 하나의 INSERT문에 담으면 그 한도를 초과하여 오류가 발생할 수 있습니다. 실무에서는 수백~수천 행 단위로 문장을 나누는 것이 일반적인 방법입니다.

CSV 파일을 테스트용 데이터베이스에 입력하는 작업은 개발 현장에서 흔히 "시드 데이터 준비(seeding)"라고 불리며, 많은 웹 프레임워크(Laravel의 seeder·factory 등)가 이를 위한 전용 메커니즘을 제공할 정도로 빈번한 작업입니다. 이런 도구는 그런 메커니즘까지 쓸 필요가 없는 소규모 검증이나 데이터 이관 시 빠르게 사용할 수 있는 수단으로 유용합니다.