Araca geç
ViewCSV
Dosya yüklenmez

CSV’yi SQL INSERT komutlarına dönüştürün

orders.csv· ÖRNEK VERİ15 satır · 8 sütun
Anahtar sütunlar
UPSERT, UPDATE ve DELETE için gereklidir; tablo oluşturulurken birincil anahtar olarak kullanılır.
Değer türleri
BEGIN;
CREATE TABLE IF NOT EXISTS "orders" (
  "order_id" TEXT,
  "customer" TEXT,
  "city" TEXT,
  "product" TEXT,
  "quantity" TEXT,
  "unit_price" TEXT,
  "order_date" TEXT,
  "status" TEXT
);
INSERT INTO "orders" ("order_id", "customer", "city", "product", "quantity", "unit_price", "order_date", "status") VALUES
  ('001041', 'Yusuf Demir', 'Ankara', 'Coffee beans 1kg', '2', '127.75', '2026-01-27', 'paid'),
  ('001042', 'Asel Yıldız', 'Ankara', 'Notebook A5', '5', '153.28', '2026-02-11', 'shipped'),
  ('001043', 'Ömer Yıldırım', 'Adana', 'Desk lamp', '8', '216.50', '2026-03-20', 'shipped'),
  ('001044', 'Ecrin Doğan', 'Adana', 'Notebook A5', '5', '141.31', '2026-04-09', 'pending'),
  ('001045', 'Azra Demir', 'Eskişehir', 'Desk lamp', '9', NULL, '2026-05-16', 'shipped'),
  ('001046', 'Yusuf Aydın', 'İzmir', 'Coffee beans 1kg', '2', '87.81', '2026-06-23', 'shipped'),
  ('001047', ' Ömer Aydın ', 'İzmir', 'Chair, ergonomic', '8', '80.58', '2026-07-17', 'shipped'),
  ('001048', 'Mustafa Arslan', 'Eskişehir', 'Chair, ergonomic', '4', '127.60', '2026-08-21', 'shipped'),
  ('001049', 'Kerem Demir', 'İzmir', 'Monitor 27"', '7', '223.28', '2026-09-08', 'paid'),
  ('001050', 'Asel Doğan', 'Ankara', 'Desk lamp', '5', '244.39', '2026-01-21', 'shipped'),
  ('001051', 'Asel Özdemir', 'Antalya', 'Desk lamp', '7', '213.46', '2026-02-08', 'refunded'),
  ('001052', 'Ömer Kaya', 'Antalya', 'Coffee beans 1kg', '9', '118.00', '2026-03-16', 'refunded'),
  ('001053', 'Ömer Aydın', 'Bursa', 'Coffee beans 1kg', '2', '121.81', '2026-04-13', 'refunded'),
  ('001054', 'Zeynep Yıldırım', 'Adana', 'USB-C cable', '7', '184.52', '2026-05-26', 'paid'),
  ('001043', 'Ömer Yıldırım', 'Adana', 'Desk lamp', '8', '216.50', '2026-03-20', 'shipped');
COMMIT;

15 satır · 1 dosya

Bir CSV dosyası açın veya yapıştırın, Veritabanı ve İfade seçin; betik seçeneklerin yanında görünür. Varsayılan çıktı, TEXT sütunlu bir CREATE TABLE IF NOT EXISTS ve 100’er satırlık INSERT ifadeleri içeren bir PostgreSQL işlemidir (transaction); böylece 00412 yine '00412' kalır. Tabloda sayısal, mantıksal ve DATE sütunları olmasını istiyorsanız Sayıları ve true/false değerlerini algıla seçeneğini seçin. Dosya tarayıcınızda dönüştürülür, hiçbir zaman yüklenmez.

CSV, SQL’e nasıl dönüştürülür?

  1. Bir .csv, .tsv veya .txt dosyası açın, araca sürükleyip bırakın ya da satırları yapıştırın. Ayırıcı algılanır; ayırıcıyı, başlık satırını veya Windows-1254 ya da Windows-1252 gibi eski bir kodlamayı İçeri aktarma ayarları altından belirleyin.
  2. Veritabanı seçin: PostgreSQL, MySQL / MariaDB, SQLite veya SQL Server. Boşlukları ve noktalama işaretleri alt çizgiye çevrilmiş dosya adıyla başlayan Tablo adı alanını kontrol edin (sales report.csv, sales_report olur).
  3. İfade seçin; UPSERT, UPDATE veya DELETE için bir satırı tanımlayan Anahtar sütunlar seçeneklerini işaretleyin.
  4. Önizlemeyi inceleyin, ardından Kopyala seçeneğini kullanın ya da .sql dosyasını indirip veritabanı istemcinizle çalıştırın; örneğin psql -f data.sql.

Aynı ayarlarla çok sayıda dosyanın betiğini oluşturmak için Toplu işlem: birden çok dosyayı dönüştür seçeneğini seçin. Her dosya sırayla dönüştürülür ve betikler tek bir ZIP olarak birlikte iner.

İfadeler ve seçenekler

INSERTÇok satırlı INSERT INTO … VALUES ifadeleri. INSERT başına satır, bir ifadede kaç satırın yer alacağını belirler (1–1.000, varsayılan 100); SQL Server 1.000’den fazlasını reddeder.
UPSERT (ekle veya güncelle)Her satır için, satırı ekleyen ya da aynı anahtara sahip mevcut satırı güncelleyen bir ifade: PostgreSQL ve SQLite’ta ON CONFLICT (…) DO UPDATE SET … = excluded.…, MySQL’de ON DUPLICATE KEY UPDATE, SQL Server’da MERGE. Hedef tablonun anahtar sütunlarda bir birincil anahtarı veya benzersiz dizini olmalıdır.
UPDATEHer satır için UPDATE … SET … WHERE key = …; anahtar sütunlar değiştirilmez. Tüm sütunlar anahtarsa güncellenecek bir şey yoktur ve hiçbir ifade yazılmaz.
DELETEHer satır için DELETE FROM … WHERE key = …. Boş bir anahtar değeri IS NULL olur.
Anahtar sütunlarUPSERT, UPDATE ve DELETE için gereklidir; araç bu ifadelerden birini WHERE anahtarı olmadan yazmaz. CREATE TABLE ekle açıkken anahtar sütunlar NOT NULL ve PRIMARY KEY olur.
CREATE TABLE ekleVarsayılan olarak açıktır. CREATE TABLE IF NOT EXISTS yazar (SQL Server’da veya DROP’tan sonra düz CREATE TABLE).
Önce DROP TABLE IF EXISTS ekleAynı adlı mevcut bir tablonun yerine yenisini koyar. Varsayılan olarak kapalıdır; betik çalıştığında eski tablo ve verileri kaybolur.
Bir işlem (transaction) içine alVarsayılan olarak açıktır: BEGIN; … COMMIT; (MySQL’de START TRANSACTION;, SQL Server’da BEGIN TRANSACTION;).
Boş hücreleri NULL olarak yazVarsayılan olarak açıktır. Boş hücreleri bunun yerine '' olarak yazmak için kapatın.

Sütun türleri ve tırnaklama

Tüm değerleri metin olarak tut (varsayılan) seçiliyken her sütun TEXT (SQL Server’da NVARCHAR(MAX)) olur ve her değer tırnaklı bir metin sabiti olarak yazılır; böylece baştaki sıfırlar, uzun kimlikler ve alışılmadık tarihler değişmeden yüklenir.

Sayıları ve true/false değerlerini algıla seçiliyken bir sütun ancak boş olmayan her değeri bir türe uyuyorsa o türü alır:

Tam sayılarINTEGER ya da bir değer 9 haneden uzunsa BIGINT. Değerler tırnaksız yazılır. Baştaki sıfırlı veya 9.007.199.254.740.991’i aşan sayılar sütunu metin olarak bırakır.
Ondalık sayılar (en fazla 15 anlamlı basamak)PostgreSQL’de NUMERIC, MySQL ve SQL Server’da veriye göre boyutlandırılmış DECIMAL(p,s), SQLite’ta REAL. 1,5 gibi bir ondalık virgül sütunu metin olarak bırakır.
true / false (herhangi bir harf büyüklüğünde)PostgreSQL ve MySQL’de TRUE/FALSE değerleriyle BOOLEAN, SQL Server’da 1/0 ile BIT, SQLite’ta 1/0 ile INTEGER.
YYYY-MM-DD biçimindeki tarihler'2026-03-01' gibi tırnaklı değerlerle DATE; SQLite’ta TEXT. Tarih-saatler ve diğer tarih biçimleri (ör. 01.03.2026) metin olarak kalır.
  • Tablo ve sütun adları tam yazıldıkları gibi tırnaklanır; böylece boşluklar, ayrılmış sözcükler ve sipariş_no gibi Latin dışı ya da Türkçe karakterli adlar çalışır: PostgreSQL ve SQLite’ta "order date", MySQL’de ` order date , SQL Server’da [order date]`. Adın içindeki tırnak karakterleri iki katına çıkarılır.
  • Değerlerde tek tırnak iki katına çıkarılır (O'Brien, 'O''Brien' olur). MySQL için ters eğik çizgiler de iki katına çıkarılır; çünkü MySQL \ karakterini varsayılan olarak kaçış karakteri sayar. SQL Server sabitleri, Unicode metin korunsun diye N ön ekini alır.
  • Tırnaklı bir CSV değerinin içindeki satır sonları SQL metin sabitinin içinde kalır.
  • NUL karakterleri çoğu veritabanında saklanamaz; bunlar silinir ve araç kaç tane olduğunu bildirir.

SQL betiği çalışmadığında

  • Betik tek bir sütundan oluşuyor. Ayırıcı yanlış tahmin edilmiş; ayırıcıyı İçeri aktarma ayarları altından belirleyip dosyayı yeniden açın.
  • Bir sayı sütunu TEXT olarak çıktı. En az bir değer sade bir sayı değil; örneğin 12 kg, 1,5 veya 007. Bunu CSV görüntüleyicide bulun ya da sütunu CSV verilerini temizle aracıyla düzeltin.
  • UPSERT eksik kısıtlama hatasıyla başarısız oluyor. ON CONFLICT ve ON DUPLICATE KEY yalnızca hedef tablonun anahtar sütunlarında bir birincil anahtar veya benzersiz dizin varsa çalışır. Dizini mevcut tabloya ekleyin ya da anahtarı CREATE TABLE ekle ile oluşturun.
  • MySQL veya SQL Server PRIMARY KEY’i reddediyor. Metin olarak kalan bir anahtar sütun TEXT (MySQL/MariaDB) veya NVARCHAR(MAX) (SQL Server) olarak oluşturulur ve iki veritabanı da bu türleri tamamen dizinleyemez. Tabloyu VARCHAR anahtarla kendiniz oluşturun, ardından CREATE TABLE ekle seçeneğini kapatın.
  • SQL Server tablonun zaten var olduğunu bildiriyor. SQL Server betikleri düz CREATE TABLE kullanır. Mevcut tabloya yüklemek için CREATE TABLE ekle seçeneğini kapatın ya da tablonun yerine yenisini koymak için Önce DROP TABLE IF EXISTS ekle seçeneğini açın.
  • Betik yarıda duruyor. Veritabanı hatası, başarısız olan ifadeyi belirtir; olağan nedenler yinelenen bir anahtar ya da mevcut bir tablodaki sütun türüne uymayan bir değerdir. Dosyayı CSV doğrula ile kontrol edin ve betiği yeniden çalıştırın.

Büyük dosyalar ve sınırlar

25 MB, 100.000 satır veya 2 milyon hücreye kadar dosyalar canlı önizlemeyle açılır. Daha büyük dosyalar akış modunda dönüştürülür: önizleme ilk 200 satırı gösterir, dosya parçalar hâlinde iki kez okunur (bir kez sütun türlerini ve genişliklerini öğrenmek, bir kez de betiği yazmak için) ve indirilen dosya tüm satırları kapsar. Tek bir betik en fazla 4 GB olabilir.

Dönüştürme bu sekmede arka plandaki bir işçide çalışır; böylece sayfa yanıt vermeye devam eder ve İptal işlemi durdurur. CSV hiçbir zaman bir sunucuya gönderilmez. Betik yerine kullanıma hazır bir veritabanı dosyası için CSV’den SQLite’a aracını kullanın.

Örnek: PostgreSQL INSERT komutları olarak bir müşteri listesi

Baştaki sıfırlı bir kimlik, kesme işareti ve virgül içeren bir ad ve boş bir plan içeren müşteri listesi, varsayılan ayarlarla ve customers tablo adıyla dönüştürüldü. Sayıları ve true/false değerlerini algıla seçildiğinde signup_date, DATE; monthly_fee tırnaksız 29.00 ile NUMERIC; active ise TRUE/FALSE ile BOOLEAN olur; customer_id ise TEXT olarak kalır.

CSV
customer_id,name,signup_date,plan,monthly_fee,active
00412,"O'Brien, Kate",2026-03-01,pro,29.00,true
00413,Luis Ortega,2026-03-04,,0,false
SQL (PostgreSQL)
BEGIN;
CREATE TABLE IF NOT EXISTS "customers" (
  "customer_id" TEXT,
  "name" TEXT,
  "signup_date" TEXT,
  "plan" TEXT,
  "monthly_fee" TEXT,
  "active" TEXT
);
INSERT INTO "customers" ("customer_id", "name", "signup_date", "plan", "monthly_fee", "active") VALUES
  ('00412', 'O''Brien, Kate', '2026-03-01', 'pro', '29.00', 'true'),
  ('00413', 'Luis Ortega', '2026-03-04', NULL, '0', 'false');
COMMIT;

Sık sorulan sorular

Varsayılan olarak neden her sütun TEXT?

CSV’de tür yoktur ve yanlış tahmin veri kaybettirir: tam sayı olarak saklanan 00412 gibi bir kimlik 412 olur. Metin, dosyada ne yazıyorsa onu yükler. Sayısal, mantıksal ve DATE sütunları istediğinizde Sayıları ve true/false değerlerini algıla seçeneğini seçin.

Betiği hangi veritabanları çalıştırabilir?

PostgreSQL, MySQL ve MariaDB, SQLite ve SQL Server; her biri kendi tanımlayıcı tırnaklaması, metin kaçışı, mantıksal değerleri ve upsert söz dizimiyle. İndirmeden önce uygun Veritabanı seçeneğini seçin; birine göre yazılmış bir betik diğerlerinde çalışmaz.

INSERT yerine COPY veya LOAD DATA komutları üretebilir mi?

Hayır. Betik standart INSERT, UPSERT, UPDATE veya DELETE ifadeleri kullanır. Çok büyük yüklemeler için CSV’yi doğrudan okuyan, veritabanınızın kendi toplu yükleyicisini düşünün; örneğin PostgreSQL’de COPY veya MySQL’de LOAD DATA.

Standartlar ve kaynaklar