SQLite Veritabanı Aslında Sadece Bir Dosyadır
MySQL ya da Postgres kullandıysan CREATE DATABASE myapp; komutunu çalıştırıp sunucunun arka planda yeni bir veritabanını kayıt altına almasına alışkınsındır. SQLite bu mantıkla çalışmaz. Ortada bir sunucu yok. CREATE DATABASE diye bir komut da yok. Burada veritabanı, diskte duran tek bir sıradan dosyadan ibarettir — genelde .db, .sqlite ya da .sqlite3 uzantısıyla görürsünüz ama uzantı sadece bir gelenek, zorunluluk değil.
SQLite veritabanı oluşturmak için sqlite3 aracını henüz var olmayan bir dosya adına yönlendirmeniz yeterli:
sqlite3 mydata.db
İşte bu kadar. mydata.db mevcut değilse SQLite onu oluşturmaya hazırdır. Varsa açar. Tek komut, iki durum birden. Kafadaki model "veritabanı sunucusu ayağa kaldırmak" değil, daha çok "bir dosyayı açmak" gibi düşünmeli.
Dosya, Bir Şey Yazana Kadar Ortaya Çıkmaz
İnsanların kafasını karıştıran bir şey var burada. Yukarıdaki komutu çalıştırın, .quit yazıp çıkın ve dizine bakın. Dosya ortada yok.
SQLite tembeldir. İçine koyacak bir şey olmadan dosyayı diske yazma zahmetine girmez. Bir tablo oluşturduğunuz ya da veri commit ettiğiniz an, dosya kendiliğinden belirir:
Artık mydata.db diskte var. İlk yazma işlemine kadar "veritabanı" yalnızca bağlantının belleğinde yaşıyor. Bu durum bazen kafa karıştırır ama bazen de işe yarar; çünkü yarıda kesilen bir oturum geride hiçbir iz bırakmaz.
SQLite komut satırından veritabanı oluşturma
Sıfırdan açtığınız bir terminalde baştan sona iş akışı şöyle:
$ sqlite3 mydata.db
SQLite version 3.45.0
Enter ".help" for usage hints.
sqlite> CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT);
sqlite> .databases
main: /home/you/mydata.db r/w
sqlite> .quit
İçerideyken işine yarayacak birkaç CLI komutu:
.databases— bağlı veritabanlarını ve dosya yollarını listeler..tables— açık veritabanındaki tabloları gösterir..schema— her şey içinCREATE TABLEifadelerini döker..quit— çıkış.
sqlite3'ü argümansız başlattıysan ve henüz açık bir dosyan yoksa, .open ile bir dosyayı bağlayabilirsiniz:
sqlite> .open mydata.db
Aynı kural geçerli: dosya yoksa oluşturur, varsa açar.
"If Not Exists" Zaten Yerleşik
Diğer veritabanlarından gelenlerin kafasındaki klasik soru: ya dosya zaten varsa? Üzerine yazar mı? Hayır. Var olan bir dosyayı açmak, sadece onu açar. Hiçbir şey ezilmez. CREATE DATABASE IF NOT EXISTS komutunun SQLite'taki en yakın karşılığı, kısaca... dosyayı açmak. SQLite her iki durumu da aynı komutla halleder.
Sıfırdan başlamak istiyorsanız, önce dosyayı silmeniz gerekir:
rm mydata.db
sqlite3 mydata.db
Ama emin olun gerçekten silmek istiyor musunuz, çünkü geri alma diye bir şey yok ve onu kurtarabileceğiniz bir yönetim aracı da bulunmuyor.
Python ile SQLite veritabanı oluşturma
Çoğu zaman komut satırında takılmayacaksınız; veritabanlarını uygulama kodunuzun içinden oluşturacaksınız. Python'ın standart kütüphanesinde hazır gelen sqlite3 modülü tam da bunun için var, ekstra kurulum gerektirmiyor:
sqlite3.connect("mydata.db") da CLI ile aynı mantıkla çalışır: dosya yoksa oluşturur, varsa açar. Diğer dillerdeki sürücüler de (Node için better-sqlite3, Go'nun database/sql sürücüsü, Rust'taki rusqlite vb.) hep aynı şekilde davranır — çünkü hepsi altta aynı C kütüphanesini sarmalıyor.
Python'a özel ufak bir kestirme var: yol olarak ":memory:" verdiğinizde tamamen RAM'de yaşayan, bağlantı kapandığında yok olan bir veritabanı elde edersiniz. Bunu bir sonraki sayfada işleyeceğiz.
Dosya Nereye Konmalı?
Veritabanı bir dosya olduğu için "bunu nereye koyayım?" sorusu gerçekten önemli. Birkaç pratik kural:
- Bir uygulama için: kullanıcının veri dizini altında ya da uygulamanızın çalışma dizininde tutun. Yazma izni olmayan sistemlerde çalıştırılabilir dosyanın yanına koymayın.
- Bir proje için: repo kökünde ya da
data/klasörü içinde tutun. Yerel duruma ait veriler içeriyorsa.gitignore'a eklemeyi unutmayın — ikili (binary) bir veritabanını Git'e commit'lemek nadiren iyi sonuçlanır. - Testler için:
:memory:ya da geçici bir dosya kullanın. Hem hızlı hem de kendi kendini temizler.
İzinler de önemli. Süreci çalıştıran kullanıcının hem dosyaya hem de üst dizine okuma ve yazma erişimi olmalı (SQLite, yazma sırasında veritabanının yanında kilit dosyaları oluşturuyor).
Hızlı Bir Kontrol
Tüm akışın baştan sona çalıştığını görmek için:
Geriye iki satır dönmeli. Bu çalışıyorsa, veritabanı dosyanız var, şemanız içinde ve verileriniz sorgulanabilir durumda. SQLite için "veritabanı oluşturma" hikâyesinin tamamı bu kadar — sunucu yok, kullanıcı yok, izin tablosu yok. Sadece bir dosya.
Sırada: Bellek İçi (In-Memory) Veritabanları
Dosya oluşturan aynı sqlite3.connect(...) çağrısı, doğru argümanla birlikte diske hiç dokunmayan bir veritabanı da oluşturabilir. SQLite in-memory database; testleri çalıştırmanın, şema prototiplemenin veya geçici veri tutmanın en hızlı yoludur. Sırada bu var.
Sıkça Sorulan Sorular
SQLite'ta veritabanı nasıl oluşturulur?
Terminale sqlite3 mydata.db yazmanız yeterli. SQLite, mydata.db dosyası yoksa onu oluşturur, varsa açar. Ayrı bir CREATE DATABASE komutu yok — burada veritabanı zaten dosyanın kendisi.
SQLite'ta CREATE DATABASE komutu var mı?
Hayır. MySQL veya PostgreSQL'in aksine SQLite'ta CREATE DATABASE diye bir SQL ifadesi bulunmuyor. Veritabanı, sqlite3 aracını (ya da Python'daki sqlite3 modülü gibi bir kütüphaneyi) henüz var olmayan bir dosya adına yönelttiğiniz anda oluşur.
Yeni oluşturduğum SQLite dosyası neden boş veya görünmez?
SQLite tembel davranır — ilk tabloyu oluşturana ya da bir transaction commit edene kadar dosyayı diske yazmaz. Sadece sqlite3 mydata.db çalıştırıp çıkarsanız ortada dosya göremezsiniz. Bir tablo oluşturun veya .databases komutunu çalıştırın, dosya hemen görünecektir.
Python'da SQLite veritabanı nasıl oluşturulur?
Yerleşik sqlite3 modülünü import edip sqlite3.connect('mydata.db') çağırın. Dosya yoksa otomatik olarak oluşturulur. Bellekte geçici bir veritabanı istiyorsanız yol olarak ':memory:' verin yeterli.