CSV to SQL

Hasilkan pernyataan SQL INSERT dari data CSV

Coba contoh

Input CSV

Output SQL

Berjalan lokal ยท Aman untuk menempel rahasia
SQL akan muncul di siniโ€ฆ
Nama tabel:

Apa itu Konversi CSV ke SQL?

Konversi CSV ke SQL mengubah nilai yang dipisahkan koma menjadi pernyataan Structured Query Language yang dapat dieksekusi oleh basis data relasional. Output paling umum berupa pasangan: pernyataan CREATE TABLE yang mendefinisikan kolom, dan satu atau lebih pernyataan INSERT INTO yang mengisi kolom tersebut dengan baris dari file CSV.

File CSV mengikuti spesifikasi RFC 4180. Setiap baris adalah satu record, kolom dipisahkan oleh pembatas (biasanya koma), dan kolom yang mengandung pembatas atau baris baru dibungkus dengan tanda kutip ganda. SQL, di sisi lain, adalah bahasa standar untuk mengelola data di sistem seperti PostgreSQL, MySQL, SQLite, dan SQL Server. Konversi antara kedua format ini adalah salah satu tugas impor data yang paling sering dilakukan dalam pengembangan perangkat lunak.

Konverter CSV-ke-SQL yang baik menangani pengapitan, meng-escape tanda kutip tunggal di dalam nilai (menggandakannya menjadi '' sesuai standar SQL), memetakan header kolom ke pengenal SQL yang valid, dan dapat menyimpulkan tipe data secara opsional. Selain escaping dasar, konverter yang baik menormalkan nama header (mengganti spasi dan tanda hubung dengan garis bawah) dan membungkus output dalam blok transaksi, sehingga kegagalan impor dapat dibatalkan dengan bersih tanpa meninggalkan data parsial di tabel. Tanpa konverter, menulis pernyataan INSERT secara manual bahkan untuk beberapa ratus baris saja sangat rentan kesalahan dan lambat.

Mengapa Menggunakan Konverter CSV ke SQL?

Menulis pernyataan SQL INSERT secara manual dari data spreadsheet membosankan dan rawan kesalahan sintaks. Konverter mengotomasi bagian yang berulang sehingga Anda bisa fokus pada desain skema dan validasi data.

โšก
Hasilkan SQL dalam hitungan detik
Tempel CSV Anda, dapatkan output SQL yang siap dijalankan. Tidak perlu mengapit string secara manual, meng-escape apostrof, atau menghitung kolom. Konversi berjalan sepenuhnya di browser Anda.
๐Ÿ”’
Data tetap di browser Anda
CSV Anda tidak pernah meninggalkan perangkat Anda. Semua penguraian dan pembuatan SQL terjadi di sisi klien, yang berarti tidak ada unggahan ke server, tidak ada pencatatan log, dan tidak ada akses pihak ketiga ke dataset Anda.
๐ŸŽฏ
Hasilkan sintaks SQL yang benar
Tanda kutip tunggal di dalam nilai di-escape sebagai '' sesuai standar SQL. Nama kolom disanitasi menjadi pengenal yang valid. Output secara sintaksis valid untuk PostgreSQL, MySQL, dan SQLite.
๐Ÿ“‹
Tangani semua struktur CSV
Alat ini mendeteksi pembatas secara otomatis (koma, titik koma, tab, pipa) dan menangani kolom yang dikutip dengan koma atau baris baru tertanam, mengikuti aturan RFC 4180.

Kasus Penggunaan CSV ke SQL

Seeding Basis Data
Konversi file fixture CSV menjadi pernyataan INSERT untuk basis data pengembangan atau staging. Berguna dalam pipeline CI di mana Anda membutuhkan data seed yang dapat diulang tanpa ORM.
Migrasi Data
Pindahkan data yang diekspor dari satu sistem (CRM, spreadsheet, aplikasi lama) ke basis data relasional baru. Buat SQL-nya, tinjau, lalu jalankan dalam transaksi.
Pengembangan Backend API
Isi dengan cepat instans PostgreSQL atau MySQL lokal dengan data uji dari CSV. Lebih cepat daripada menulis skrip migrasi ketika Anda hanya membutuhkan pemuatan satu kali.
QA dan Otomasi Pengujian
Buat SQL dari fixture CSV pengujian untuk menyiapkan kondisi basis data sebelum pengujian integrasi. Padukan dengan skrip teardown untuk mengatur ulang tabel di antara sesi pengujian.
Persiapan Analisis Data
Muat dataset CSV ke SQLite untuk kueri ad-hoc. SQLite membaca pernyataan SQL INSERT secara langsung, menjadikan ini jalur cepat dari ekspor spreadsheet ke data yang dapat dikueri.
Belajar SQL
Mahasiswa dapat mengonversi contoh CSV ke SQL untuk berlatih kueri SELECT, JOIN, dan agregat pada data yang terlihat nyata tanpa harus menyiapkan skema dari awal.

Referensi Tipe Data SQL

Saat mengonversi CSV ke SQL, setiap kolom menggunakan TEXT sebagai default karena CSV tidak memiliki metadata tipe. Jika Anda mengetahui tipe kolom, Anda dapat mengganti TEXT pada output CREATE TABLE. Tabel ini menampilkan tipe SQL yang paling umum dan kapan menggunakannya.

TipeDigunakan UntukCatatan
TEXT / VARCHARStrings, mixed contentDefault safe choice; works in every SQL dialect
INTEGER / INTWhole numbers (age, count, ID)Use when column contains only digits with no decimals
REAL / FLOATDecimal numbers (price, rate)Needed for columns with dots like 19.99 or 3.14
DATEISO 8601 dates (2024-01-15)Requires consistent formatting; varies by database
BOOLEANtrue/false, 1/0, yes/noMySQL uses TINYINT(1); PostgreSQL has native BOOL
NUMERIC / DECIMALExact precision (currency)Specify scale: DECIMAL(10,2) for money columns
BLOB / BYTEABinary dataRarely needed in CSV imports; use for hex-encoded fields

Perbandingan Dialek SQL

Sintaks SQL bervariasi antar mesin basis data. Pernyataan INSERT yang dihasilkan menggunakan SQL standar yang berlaku di sebagian besar sistem, namun fitur tertentu berbeda. Tabel ini merangkum perbedaan yang paling penting saat mengimpor data CSV.

FiturPostgreSQLMySQLSQLiteSQL Server
Identifier quoting"col"`col`"col"[col]
String escape'''' or \'''''
INSERT syntaxINSERT INTOINSERT INTOINSERT INTOINSERT INTO
Batch INSERTVALUES (),()โ€ฆVALUES (),()โ€ฆVALUES (),()โ€ฆmax 1000 rows
Auto-incrementSERIALAUTO_INCREMENTAUTOINCREMENTIDENTITY(1,1)
Upsert / mergeON CONFLICTON DUPLICATE KEYON CONFLICTMERGE
NULL handlingIS NULLIS NULL / <=>IS NULLIS NULL
COPY from CSVCOPY โ€ฆ FROMLOAD DATA INFILE.importBULK INSERT

INSERT vs COPY: Memilih Metode Impor

Untuk dataset kecil hingga menengah (di bawah 10.000 baris), pernyataan INSERT bekerja dengan baik dan portabel di semua basis data SQL. Untuk impor besar, basis data menyediakan perintah pemuatan massal yang melewati parser SQL sepenuhnya.

INSERT INTO
SQL standar. Berlaku di mana saja. Setiap baris diurai sebagai pernyataan SQL, sehingga overhead lebih tinggi untuk dataset besar. Mendukung logika kondisional (ON CONFLICT, ON DUPLICATE KEY). Terbaik untuk data seed, migrasi kecil, dan kasus di mana Anda membutuhkan kontrol per baris.
COPY / LOAD DATA
Pemuat massal spesifik basis data. PostgreSQL menggunakan COPY, MySQL menggunakan LOAD DATA INFILE, SQLite menggunakan .import, dan SQL Server menggunakan BULK INSERT. Membaca CSV secara langsung, melewati parser SQL. 10-100x lebih cepat untuk file besar (100 ribu baris ke atas). Memerlukan akses sistem file di server atau klien.

Contoh Kode

Contoh-contoh ini menunjukkan cara mengonversi CSV ke pernyataan SQL INSERT dalam berbagai bahasa. Masing-masing menangani escaping tanda kutip tunggal dan sanitasi nama kolom.

JavaScript (Node.js)
// CSV โ†’ SQL INSERT statements
const csv = `name,age,city
Alice,30,Berlin
Bob,25,Tokyo`

function csvToSql(csv, table = 'data') {
  const rows = csv.trim().split('\n').map(r => r.split(','))
  const [headers, ...data] = rows
  const cols = headers.map(h => h.trim().toLowerCase().replace(/\s+/g, '_'))

  const values = data.map(row =>
    '  (' + row.map(v => `'${v.replace(/'/g, "''").trim()}'`).join(', ') + ')'
  )

  return `INSERT INTO ${table} (${cols.join(', ')}) VALUES
${values.join(',\n')};`
}

console.log(csvToSql(csv, 'users'))
// โ†’ INSERT INTO users (name, age, city) VALUES
//     ('Alice', '30', 'Berlin'),
//     ('Bob', '25', 'Tokyo');
Python
import csv
import io

csv_string = """name,age,city
Alice,30,Berlin
Bob,25,Tokyo"""

reader = csv.reader(io.StringIO(csv_string))
headers = [h.strip().lower().replace(' ', '_') for h in next(reader)]

table = 'users'
rows = list(reader)

# CREATE TABLE
col_defs = ', '.join(f'{h} TEXT' for h in headers)
print(f'CREATE TABLE {table} ({col_defs});')
# โ†’ CREATE TABLE users (name TEXT, age TEXT, city TEXT);

# INSERT statements
for row in rows:
    vals = ', '.join(f"'{v.replace(chr(39), chr(39)*2)}'" for v in row)
    print(f"INSERT INTO {table} ({', '.join(headers)}) VALUES ({vals});")
# โ†’ INSERT INTO users (name, age, city) VALUES ('Alice', '30', 'Berlin');
# โ†’ INSERT INTO users (name, age, city) VALUES ('Bob', '25', 'Tokyo');
Go
package main

import (
	"encoding/csv"
	"fmt"
	"strings"
)

func csvToSQL(data, table string) string {
	r := csv.NewReader(strings.NewReader(data))
	records, _ := r.ReadAll()
	if len(records) < 2 {
		return ""
	}

	headers := records[0]
	var vals []string
	for _, row := range records[1:] {
		escaped := make([]string, len(row))
		for i, v := range row {
			escaped[i] = "'" + strings.ReplaceAll(v, "'", "''") + "'"
		}
		vals = append(vals, "  ("+strings.Join(escaped, ", ")+")")
	}

	return fmt.Sprintf("INSERT INTO %s (%s) VALUES\n%s;",
		table, strings.Join(headers, ", "), strings.Join(vals, ",\n"))
}

func main() {
	csv := "name,age,city\nAlice,30,Berlin\nBob,25,Tokyo"
	fmt.Println(csvToSQL(csv, "users"))
	// โ†’ INSERT INTO users (name, age, city) VALUES
	//     ('Alice', '30', 'Berlin'),
	//     ('Bob', '25', 'Tokyo');
}
CLI (sqlite3 / psql)
# SQLite: import CSV directly into a table
sqlite3 mydb.db <<EOF
.mode csv
.import data.csv users
SELECT * FROM users LIMIT 5;
EOF

# PostgreSQL: COPY from CSV file (server-side)
psql -c "COPY users FROM '/path/to/data.csv' WITH (FORMAT csv, HEADER true);"

# PostgreSQL: \copy from CSV (client-side, no superuser needed)
psql -c "\copy users FROM 'data.csv' WITH (FORMAT csv, HEADER true);"

# MySQL: LOAD DATA from CSV
mysql -e "LOAD DATA INFILE '/path/to/data.csv' INTO TABLE users
  FIELDS TERMINATED BY ',' ENCLOSED BY '"'
  LINES TERMINATED BY '\n' IGNORE 1 ROWS;"

Pertanyaan yang Sering Diajukan

Bagaimana tanda kutip tunggal dalam nilai CSV ditangani di output SQL?
Setiap tanda kutip tunggal (') dalam nilai CSV digandakan menjadi '' pada output SQL. Ini adalah urutan escape standar SQL. Misalnya, nilai seperti "O'Brien" menjadi 'O''Brien' dalam pernyataan INSERT. Ini berlaku di PostgreSQL, MySQL, SQLite, dan SQL Server.
Bisakah saya mengonversi CSV ke SQL untuk basis data tertentu seperti MySQL atau PostgreSQL?
Pernyataan INSERT yang dihasilkan menggunakan sintaks SQL standar yang diterima baik oleh MySQL maupun PostgreSQL. Perbedaan utamanya adalah pengapitan pengenal: PostgreSQL menggunakan tanda kutip ganda, MySQL menggunakan backtick. Untuk operasi INSERT dasar, output bekerja di keduanya tanpa modifikasi.
Apa yang terjadi jika CSV saya tidak memiliki baris header?
Konverter memperlakukan baris pertama sebagai header kolom. Jika CSV Anda tidak memiliki header, tambahkan baris header sebelum mengonversi, atau baris data pertama akan menjadi nama kolom dalam pernyataan CREATE TABLE. Sebagian besar konverter, termasuk ini, memerlukan baris header.
Apakah ada batasan baris untuk konversi CSV ke SQL?
Karena konversi berjalan di browser Anda, batas praktisnya bergantung pada memori perangkat Anda. File dengan puluhan ribu baris dapat dikonversi tanpa masalah. Untuk file yang sangat besar (500 ribu baris ke atas), pertimbangkan menggunakan perintah COPY atau LOAD DATA bawaan basis data, bukan pernyataan INSERT.
Mengapa output menggunakan TEXT untuk semua kolom, bukan INTEGER atau DATE?
CSV adalah format teks biasa tanpa metadata tipe. Konverter menggunakan TEXT sebagai default yang aman untuk menghindari inferensi tipe yang salah. Anda dapat mengubah tipe kolom dalam pernyataan CREATE TABLE yang dihasilkan setelah meninjau data Anda. INTEGER untuk kolom numerik dan DATE untuk kolom tanggal adalah penyesuaian yang umum.
Bagaimana cara menangani file CSV dengan titik koma atau tab sebagai pembatas?
Alat ini mendeteksi pembatas secara otomatis dengan menganalisis baris pertama CSV Anda. Alat ini memeriksa koma, titik koma, tab, dan karakter pipa, lalu menggunakan yang paling sering muncul. CSV format Eropa yang menggunakan titik koma dapat diproses tanpa perubahan konfigurasi apa pun.
Apakah SQL yang dihasilkan aman dari injeksi jika dijalankan langsung?
Output meng-escape tanda kutip tunggal, yang mencegah kesalahan sintaks yang tidak disengaja. Namun, jika data CSV Anda berasal dari sumber yang tidak tepercaya, perlakukan SQL yang dihasilkan sama seperti Anda memperlakukan input yang belum divalidasi. Tinjau output sebelum menjalankannya pada basis data produksi. Untuk impor terprogram, kueri berparameter selalu lebih aman daripada penggabungan string.