CSV'den SQL INSERT'e
CSV tablosunu çalıştırmaya hazır INSERT satırlarına çevirin; tırnak kaçışı ve NULL doğru yazılır
Verileriniz sizde kalır. Dönüşüm tarayıcının içinde yapılır, hiçbir şey sunucuya gitmez.
Bu araç işinizi gördü mü?
Teşekkürler, geri bildiriminiz alındı.
Nasıl çalışır?
CSV tablosunu sol panele yapıştırın; INSERT satırları siz yazarken sağ panelde oluşur. İlk satır sütun adı sayılır ve bu adlar INSERT INTO satırındaki sütun listesine geçer: 120 satırlık bir müşteri dökümü, yapıştırdığınız anda 120 INSERT deyimine iner. Sütun adları SQL'e uyarlanır — 'ürün adı' başlığı 'urun_adi' olur, çünkü boşluk ve Türkçe harf tırnaksız yazılan bir sütun adında sorun çıkarır; kaç adın değiştiği sonuç satırında yazılır. Değerler için kural nettir: metinler tek tırnakla sarılır, metnin içindeki tek tırnak ikiye katlanır ('Ali''nin'), boş hücreler NULL olur ve sayılar tırnaksız kalır. Tırnaklı CSV alanları doğru okunur; virgül veya satır sonu içeren bir hücreyi çift tırnak içine aldıysanız hücre bölünmez. Ayırıcı otomatik seçildiğinde dosyanın tek satırına değil ilk satırlarına birden bakılır; hangi aday her satırda aynı sayıda sütun üretiyorsa o seçilir. Satır sonunun üç biçimi de tanınır: Windows'un CR+LF'i, Mac ve Linux'un LF'i ve çok eski programların yalnız CR'si — yalnız CR kullanan bir dosya birçok araçta tek satır gibi görünür, burada satır satır okunur. Bir satırda başlıktan fazla hücre bulunursa dönüşüm durur ve kaçıncı veri satırında kaç hücre görüldüğü söylenir — bu neredeyse her zaman tırnaklanmamış bir ayırıcı demektir. Çıktıyı kopyalayabilir veya .sql dosyası olarak indirip veritabanı istemcinizde çalıştırabilirsiniz.
Bu araç csv to sql aramalarıyla da biliniyor.
INSERT deyimi nedir?
INSERT, bir tabloya yeni satır ekleyen SQL komutudur ve üç parçadan oluşur: hangi tabloya yazılacağı, hangi sütunlara yazılacağı ve değerler. INSERT INTO musteri (ad, sehir) VALUES ('Ayşe', 'İzmir') satırı bunu birebir gösterir. Sütun listesini yazmak zorunlu değildir ama yazmak alışkanlık hâline getirilmelidir: liste olmadan değerler tablodaki sütun sırasına göre yerleşir ve tabloya sonradan bir sütun eklendiğinde eski INSERT satırları sessizce yanlış sütuna yazmaya başlar. Bu araç sütun listesini her zaman yazar.
NULL nedir?
NULL, SQL'de 'değer yok' anlamına gelen özel bir işarettir ve sıfırdan da boş metinden de farklıdır. Farkın pratik sonucu karşılaştırmalarda görülür: NULL ile yapılan hiçbir karşılaştırma doğru sonuç vermez, bu yüzden boş kayıtları ararken eşittir değil IS NULL yazılır; ayrıca çoğu toplama işlevi NULL satırları hesabın dışında bırakır. CSV'de boş bırakılmış bir hücre genellikle 'bilgi girilmedi' demektir, bu yüzden bu araç boş hücreyi tırnaklı boş metin değil NULL olarak yazar.
Tek tırnak kaçışı (escaping) nedir?
Kaçışlama, bir metnin içinde geçen ve o bağlamda özel anlam taşıyan işareti, sistemin veri olarak okuyacağı biçimde yazmaktır. SQL'de bu işaret tek tırnaktır: metin değerini o sarar, dolayısıyla değerin içinde geçen her tek tırnak ikiye katlanarak yazılmak zorundadır. Standart yol budur ve her veritabanında aynı çalışır. Ters eğik çizgiyle kaçırma MySQL'in ek bir davranışıdır, taşınabilir değildir. Kaçışlama unutulduğunda ortaya çıkan tablo tanıdıktır: kesme işaretli her kayıt ya hata verir ya da yarım kaydedilir.
Tek INSERT ile satır satır INSERT arasındaki fark nedir?
İkisi de aynı satırları aynı tabloya yazar; fark hızda ve hata davranışındadır. Satır satır düzende her kayıt kendi deyimini alır: veritabanı her deyimi ayrı ayrı ayrıştırır, bu yüzden on binlerce satırda belirgin biçimde yavaştır — ama bir satırda tip uyuşmazlığı ya da tekrar eden anahtar varsa yalnızca o satır düşer, geri kalanı yazılır ve hangi satırın düştüğü kolayca bulunur. Tek INSERT çok VALUES düzeninde ise bütün satırlar tek deyimde toplanır: ayrıştırma bir kez yapılır, ağ gidiş dönüşü tektir ve toplu yüklemede kat kat hızlıdır. Bedeli şudur: deyim tek bir bütün olduğu için tek bir bozuk satır tamamının reddedilmesine yol açabilir. Pratik kural: temizliğinden emin olmadığınız veriyi satır satır, doğrulanmış toplu aktarımı tek deyimle yükleyin.
Tek tırnak neden ikiye katlanır?
SQL'de metin değeri tek tırnak arasında yazılır. Değerin kendisinde bir tek tırnak geçtiğinde (Türkçede sık: 'Ali'nin', 'Ankara'dan') veritabanı o işareti metnin bittiği yer sanar ve deyimin geri kalanını komut olarak okumaya çalışır. Sonuç ya sözdizimi hatası ya da yanlış kaydedilmiş veridir.
Standardın çözümü katlamadır: değerin içindeki her tek tırnak iki tek tırnak olarak yazılır ve veritabanı bunu tek işaret olarak geri okur. Bu araç katlamayı her değerde uygular. Katlama, ters eğik çizgiyle kaçırmaktan farklıdır ve önemli bir sebeple tercih edilir: ters eğik çizgi kaçışı standart değil, MySQL'in varsayılan davranışıdır; katlama ise her veritabanında aynı çalışır.
Veritabanına göre değişenler: MySQL, PostgreSQL, SQLite
Üretilen SQL genel amaçlıdır ve üç sistemde de çalışacak sade bir yazımla üretilir. Yine de her veritabanının kendi alışkanlıkları vardır; çıktıyı çalıştırmadan önce bu farkları bilin:
- Tarih ve saat: değerler metin olarak yazılır. PostgreSQL 'GG.AA.YYYY' biçimini kendiliğinden kabul etmez, sütun tipine göre biçim çevirisi (TO_DATE) gerekebilir
- Ters eğik çizgi: MySQL varsayılan ayarında ters eğik çizgiyi kaçış işareti sayar, PostgreSQL ve SQLite saymaz. Verinizde dosya yolu varsa çıktıyı MySQL'de denetleyin
- Sütun adı tırnaklama: MySQL ters tırnak, PostgreSQL ve SQLite çift tırnak kullanır. Adlar ASCII harf, rakam ve alt çizgiye indirgendiği için çıktıda hiç tırnak kullanılmaz — üçünde de çalışır
- Mantıksal değer: true ve false metin olarak tırnaklanır. SQLite'ta mantıksal tip yoktur, MySQL'de 1/0 beklenir; gerekiyorsa çıktıyı topluca değiştirin
- Ondalık ayracı: 1250.50 tırnaksız sayı olur; 1.234 ve 1.250,50 gibi yazımlar tırnaklanıp metin kalır, çünkü noktadan sonra tam üç hane varsa o basamak grubu binlik de olabilir ondalık da — araç tahmin ederse tutar bin kat sapar
Hangi ayar hangi iş için?
Beş ayarın hepsi çıktının nerede çalışacağına göre seçilir; varsayılanlar en yaygın senaryoya ayarlıdır.
- Birkaç yüz satırı test veritabanına atmak → Her satır ayrı INSERT (bir satır hata verirse yalnız o satır kalır)
- On binlerce satırı canlıya yüklemek → Tek INSERT, çok VALUES (tek işlem, belirgin biçimde hızlı)
- Sütunların hepsi metin (VARCHAR/TEXT) → Hepsini tırnakla sar
- Telefon numarası, posta kodu, TCKN gibi sütunlar → araç bunları zaten tırnaklar (baştaki sıfır ve 15 haneden uzun numara metin kalır); sütunun tamamı VARCHAR ise yine de Hepsini tırnakla sar seçeneği daha nettir
- Excel'den kopyalanmış veri → Ayırıcıyı Noktalı virgül veya Sekme yapın, otomatik algılama şaşarsa elle seçin
- Başlıksız dışa aktarım → Sütun adı yok; sütunlar c1, c2 diye adlandırılır, çıktıda elle değiştirirsiniz
Bu araç CREATE TABLE üretmez
Çıktı yalnızca INSERT deyimleridir; tablonun veritabanında zaten var olduğu varsayılır. Sebebi dürüstlüktür: sütun tiplerini CSV'ye bakarak tahmin etmek riskli bir iştir. Sadece rakamlardan oluşan bir sütun sayı gibi görünür ama posta kodu olabilir, 12 haneli bir alan tam sayı sınırını aşabilir, iki satırda tarih üçüncü satırda boş metin bulunabilir.
Yanlış tahmin edilmiş bir tip, doğru görünen ama sessizce veri kaybeden bir tablo üretir — baştaki sıfırların silinmesi bunun klasik örneğidir. Tabloyu siz oluşturursanız her sütunun tipini bilerek seçmiş olursunuz; bu araç da o tabloya veriyi doğru kaçışlanmış hâlde taşır.
Sık sorulanlar
CSV'den SQL INSERT nasıl oluşturulur?
CSV tablosunu sol panele yapıştırıp tablo adını yazmanız yeterlidir; INSERT satırları sağ panelde anında oluşur. Çıktıyı kopyalayabilir veya .sql dosyası olarak indirip veritabanı istemcinizde çalıştırabilirsiniz. Tablonun veritabanında önceden oluşturulmuş olması gerekir.
İçinde kesme işareti geçen isimler sorun çıkarır mı?
Hayır. 'Ali'nin' gibi bir değerdeki tek tırnak SQL standardına göre ikiye katlanarak yazılır ve veritabanı bunu tek işaret olarak geri okur. Katlama yapılmasaydı deyim tam o noktada bölünür, sözdizimi hatası verir ya da yanlış veri kaydederdi.
Boş hücre NULL mı, boş metin mi olur?
Boş hücre NULL olarak yazılır, çünkü CSV'de boş bir hücre çoğunlukla 'değer yok' anlamına gelir. Boş metni ayrı tutmanız gerekiyorsa o hücrelere iki çift tırnak yerine bir boşluk koymak yerine, aktarımdan sonra ilgili sütunda güncelleme çalıştırmanız daha güvenlidir.
Tarih sütunları doğru aktarılır mı?
Tarihler metin olarak, olduğu gibi tırnaklanır. Hedef sütun tarih tipindeyse veritabanının kabul ettiği biçimde olmaları gerekir: ISO yazımı (2026-08-24) üç sistemde de sorunsuz okunur, gün.ay.yıl yazımı ise çoğu kurulumda çevrim gerektirir.
Yapıştırdığım tablo bir sunucuya gönderiliyor mu?
Hayır. Ayrıştırma ve SQL üretimi tamamen tarayıcınızın içinde çalışır; müşteri listesi, fiyat dökümü ya da personel tablosu yapıştırsanız bile veri bu sayfadan çıkmaz ve hiçbir yere kaydedilmez.