SQLite'ı kurmak, aslında tek bir program dosyası edinmek demektir: sqlite3 (Windows'ta sqlite3.exe) adlı komut satırı aracını resmî indirme sayfasından hazır derlenmiş olarak alabilir, dağıtımınızın paket yöneticisiyle kurabilir veya kaynak koddan birkaç komutla derleyebilirsiniz. Başlatmak, durdurmak ya da yapılandırmak gereken bir sunucu yoktur; araç bir veritabanı dosyasını açar ve yazdığınız SQL komutlarını çalıştırır.

Bu yazıda indirme sayfasındaki dosya adlarını nasıl okuyacağınızı, Linux ve Windows'ta derleme seçeneklerini, kurulumu doğrulamayı, ilk oturumu ve en sık kullanılan komut satırı seçeneklerini adım adım ele alıyoruz. Sonunda sunucuda çalışacaklar için dosya konumu ve izinlerle ilgili uyarıları bulacaksınız. SQLite'ın genel tanıtımı için SQLite nedir yazısına, tüm serinin sırası için SQLite öğrenme rehberine bakabilirsiniz.

Kütüphane ile komut satırı aracı aynı şey değil

SQLite belgeleri iki kavramı ayırmanızı özellikle ister. SQLite kütüphanesi, SQL veritabanı motorunu uygulayan C kodudur ve uygulamanızın içine gömülür. sqlite3 komut satırı aracı (CLI) ise bu kütüphaneyi kullanan bir uygulamadır: sizden metin alır, kütüphaneye iletir ve sonuçları ekrana yazar. Birisi "sqlite3" dediğinde hangisini kastettiğini çoğu zaman bağlamdan anlamanız gerekir.

Bu ayrımın pratik bir sonucu vardır: Python, PHP veya Node.js içinden kullandığınız SQLite, komut satırındaki araçla aynı sürümde olmayabilir. Bu yazının denemelerinde komut satırı aracı 3.50.6, Python içindeki kütüphane ise 3.45.3 sürümündeydi. Bir özelliği komut satırında denediğinizde çalışması, uygulamanızda da çalışacağı anlamına gelmez; uygulama tarafındaki sürümü ayrıca kontrol edin. Dil bağlayıcıları için Python sqlite3, Node.js node:sqlite ve PHP PDO yazılarımıza bakabilirsiniz.

İndirme sayfasındaki dosya adlarını okumak

İndirme sayfasındaki dosya adlarını okumak: sqlite-ürün-sürüm.zip, sqlite-ürün-sürüm.tar.gz, sqlite-ürün-işletim sistemi-işlemci-sürüm.zip, sqlite-ürün-tarih.zip

Resmî indirme sayfası, ürünleri sabit bir adlandırma şablonuyla yayımlar. Bu şablonu bilmek, doğru dosyayı seçmenizi ve betiklerle otomatik indirme yapmanızı kolaylaştırır.

ŞablonNe için kullanılır
sqlite-ürün-sürüm.zipGenel kaynak kodu paketleri
sqlite-ürün-sürüm.tar.gzÇoğunlukla Unix benzeri sistemlerde işe yarayan kaynak paketleri
sqlite-ürün-işletim sistemi-işlemci-sürüm.zipHazır derlenmiş ikili dosyalar
sqlite-ürün-tarih.zipResmî olmayan, sürüm öncesi anlık görüntüler (snapshot)

Sürüm numarası dosya adında, ls ile listelendiğinde doğru sırada görünecek biçimde kodlanır. 3.X.Y sürümü için kod 3XXYY00 şeklindedir; örneğin bu yazının dayandığı 3.54.1 belgeleri sqlite-doc-3540100.zip adıyla yayımlanır. Dal sürümleri için son iki hane de kullanılır (3XXYYZZ). Anlık görüntülerdeki tarih ise YYYYAAGGSSDD biçimindedir. Bu anlık görüntüler resmî sürüm değildir; üretim ortamında numaralı sürümleri tercih edin.

Sayfanın HTML kaynağında, betiklerin okuyabilmesi için bir yorum içine gömülmüş CSV tablosu bulunur. Sütunları ürün, sürüm, göreli adres, bayt cinsinden boyut ve SHA3 özetidir. İndirdiğiniz dosyanın SHA3-256 özetini bu değerle karşılaştırmak, dosyanın bozulmadığını ve değiştirilmediğini doğrulamanın en basit yoludur. Kaynak kodunun tamamı ayrıca coğrafi olarak dağıtılmış üç Fossil deposunda ve bir GitHub yansısında tutulur.

Linux ve Windows'ta derleme seçenekleri

Linux ve Windows'ta derleme seçenekleri

Linux sunucularda en kolay yol dağıtımınızın paket yöneticisidir; ancak paketlenen sürüm resmî son sürümün gerisinde kalabilir. Belirli bir sürüme ya da derleme seçeneğine ihtiyacınız varsa kaynak koddan derlemek zor değildir. SQLite'ın zorunlu bir bağımlılığı yoktur; derleyicinin kurulu olması yeterlidir. Belgeler, tek dosyada birleştirilmiş "amalgamation" kaynak dosyasını (sqlite3.c) tüm uygulamalar için önerir; bütün kütüphane tek çeviri birimi olduğu için derleyici daha ileri iyileştirmeler yapabilir.

bash
# Unix ve Mac: kaynak ağacında
./configure && make

# Komut satırı aracını üç dosyadan derlemek (sqlite3.c, sqlite3.h, shell.c aynı klasörde)
gcc shell.c sqlite3.c -lpthread -ldl -lm -o sqlite3

# Tek iş parçacıklı araç için pthreads olmadan
gcc -DSQLITE_THREADSAFE=0 shell.c sqlite3.c -ldl -lm -o sqlite3

# Windows, MSVC
nmake /f Makefile.msc

Komut satırı aracını derlemek için üç dosya yeterlidir: kütüphanenin kendisi olan sqlite3.c, ona eşlik eden başlık dosyası sqlite3.h ve kullanıcı girişini okuyan main() fonksiyonunu içeren shell.c. Bu üç dosya indirme sayfasındaki amalgamation paketinde birlikte gelir. Araç tek iş parçacığıyla çalıştığından -DSQLITE_THREADSAFE=0 ile pthreads kütüphanesini devreden çıkarabilirsiniz. Eklenti yükleme ihtiyacınız yoksa -DSQLITE_OMIT_LOAD_EXTENSION ile -ldl bağımlılığından da kurtulursunuz.

Derleme seçenekleri, hangi özelliklerin araca dahil olacağını belirler. Tam metin arama için -DSQLITE_ENABLE_FTS5, R*Tree için -DSQLITE_ENABLE_RTREE, dbstat sanal tablosu için -DSQLITE_ENABLE_DBSTAT_VTAB, genişletilmiş matematik fonksiyonları için -DSQLITE_ENABLE_MATH_FUNCTIONS eklenir. Satır düzenleme desteği isterseniz -DHAVE_READLINE ile birlikte readline ve ncurses kütüphanelerini bağlarsınız. Belgelerdeki tam donanımlı örnek şöyledir:

bash
gcc -Os -I. -DSQLITE_THREADSAFE=0 -DSQLITE_ENABLE_FTS4 \
   -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_JSON1 \
   -DSQLITE_ENABLE_RTREE -DSQLITE_ENABLE_EXPLAIN_COMMENTS \
   -DHAVE_READLINE \
   shell.c sqlite3.c -ldl -lm -lreadline -lncurses -o sqlite3

.archive komutunun çalışması için zlib kütüphanesi gerekir. Windows'ta MSVC kullanıyorsanız configure adımı atlanır; kaynak ağacındaki make.bat dosyası make sqlite3.exe komutunu sizin için uygun nmake çağrısına çevirir. Resmî sitedeki hazır derlenmiş araç boyut için iyileştirilmiş (-Os) olarak derlenir. Bu bölümdeki derleme komutları belgelerden alınmıştır; yazının deneme ortamında derleyici bulunmadığı için çalıştırılmadı.

Kurulumu doğrulamak

Kurulumdan sonra ilk iş aracın sürümünü kontrol etmektir. --version seçeneği sürüm numarasını, kaynak kodun tarihini ve kimliğini yazar:

bash
sqlite3 --version
# çıktı (bu yazının deneme makinesi):
# 3.50.6 2025-09-22 18:50:24 9cc554372371e07bf01d8070a64d461ac85b91be6eef0e642ed129a0c7fa8105 (32-bit)

Derlemenizde hangi özelliklerin bulunduğunu SQL ile de sorgulayabilirsiniz. PRAGMA compile_options derlemede kullanılan seçenekleri "SQLITE_" öneki olmadan tek tek listeler; sqlite_compileoption_used() ise tek bir seçenek için 1 veya 0 döndürür. Aşağıdaki çıktılar standart SQLite 3.45.3 derlemesine aittir:

sql
SELECT sqlite_version();
-- çıktı: 3.45.3
SELECT sqlite_compileoption_used('ENABLE_FTS5');
-- çıktı: 1
SELECT sqlite_compileoption_used('ENABLE_RTREE');
-- çıktı: 1
SELECT sqlite_compileoption_used('ENABLE_ICU');
-- çıktı: 0

Her derleme bu tanılama fonksiyonlarını içermeyebilir. Bu yazıdaki denemelerde kullanılan 3.50.6 komut satırı aracında sqlite_compileoption_used çağrısı "no such function" hatası verdi ve PRAGMA compile_options boş sonuç döndürdü. Böyle bir durumda özelliği doğrudan denemek (örneğin bir FTS5 tablosu oluşturmayı denemek) en güvenilir yöntemdir.

İlk oturum: dosya veya bellek içi veritabanı

Aracı bir dosya adıyla başlatırsanız o dosya açılır; dosya yoksa yeni bir veritabanı olarak otomatik oluşturulur. Dosya adı vermezseniz geçici, bellekte duran bir veritabanı kullanılır ve program kapanınca silinir. İstem açıldıktan sonra SQL komutlarını noktalı virgülle bitirip Enter'a basarsınız. Noktalı virgülü unutursanız araç bir devam istemi gösterir ve komutun geri kalanını bekler; bu sayede uzun komutları birden fazla satıra yayabilirsiniz.

sql
$ sqlite3 ornek.db
sqlite> CREATE TABLE t(a, b);
sqlite> INSERT INTO t VALUES (1, 2);
sqlite> SELECT a,
   ...>        b
   ...> FROM t;
1|2
sqlite> .quit

Örnekteki sqlite> istemi ve 1|2 biçimindeki çıktı 3.53 öncesi sürümlere aittir. Daha yeni bir araçla etkileşimli çalışırken sonuç kutu çizgili bir tablo olarak görünür; bunu .mode yazısında ayrıntılı anlatıyoruz.

Oturumdan çıkmak için .quit ya da .exit yazabilir veya sisteminizin dosya sonu karakterini (genellikle Ctrl-D) gönderebilirsiniz. Uzun süren bir sorguyu durdurmak için kesme karakteri (genellikle Ctrl-C) kullanılır. 3.54 ile istem metni de değişti: varsayılan istem artık sürüm ve dosya adı gibi durum bilgilerini gösterebiliyor ve SQLITE_PS1, SQLITE_PS2 ortam değişkenleriyle özelleştirilebiliyor. Renkleri kapatmak için NO_COLOR=1 ortam değişkeni tanınır.

Windows'ta sqlite3.exe simgesine çift tıklarsanız araç komut satırı argümanı almadan açılır ve bu yüzden bellek içi veritabanını kullanır. Kalıcı bir dosyayla çalışmak için hemen .open komutunu verin. Belgeler dizin ayırıcısı olarak ters eğik çizgi yerine düz eğik çizgi kullanmanızı önerir. Bellekte yaptığınız çalışmayı .save ile bir dosyaya yazabilirsiniz; ancak bu komut aynı adlı dosyanın üzerine onay sormadan yazar.

sql
.open c:/veri/app.db
.open --readonly c:/veri/app.db
.save c:/veri/kopya.db

En çok kullanılan komut satırı seçenekleri

En çok kullanılan komut satırı seçenekleri: -bail, -batch, -cmd KOMUT, -init DOSYA

Tire ile başlayan argümanlar seçenek olarak yorumlanır; bir veya iki tire kullanmanız fark etmez, yani -box ile --box aynıdır. Seçenekler soldan sağa işlenir, bu yüzden sonra gelen bir çıktı biçimi seçeneği öncekini geçersiz kılar. Tam liste için sqlite3 --help komutunu çalıştırın.

SeçenekNe yapar
-bailİlk hatada durur
-batchBetik (batch) giriş-çıkışını zorlar
-cmd KOMUTStandart girişi okumadan önce KOMUT'u çalıştırır
-init DOSYAVerilen dosyadaki komutları başta işler
-csv, -json, -line, -boxÇıktı biçimini seçer
-header, -noheaderSütun başlıklarını açar veya kapatır
-readonlyVeritabanını salt okunur açar
-safeAna dosya dışında diske dokunabilecek özellikleri kapatır
-echoGirdileri çalıştırmadan önce ekrana yazar
-ifexistsDosya yoksa yenisini oluşturmaz (3.51.0 ile eklendi)

Dosya adından sonra gelen ek argümanlar, sanki klavyeden yazılmış satırlarmış gibi soldan sağa çalıştırılır. Her biri bir SQL komutu ya da nokta komutu olabilir; boşluk içerdikleri için tırnak içine almanız gerekir. Bu şekilde argüman verildiğinde standart giriş okunmaz ve araç argümanları işledikten sonra kapanır. Bu davranış, kabuk betiklerinde tek satırlık sorgular için çok kullanışlıdır:

bash
sqlite3 ornek.db "SELECT count(*) FROM t;"
# çıktı: 1

sqlite3 ornek.db ".tables" "SELECT count(*) FROM t;"
# çıktı:
# t
# 1

sqlite3 -json :memory: "SELECT 1 AS a, 'x' AS b;"
# çıktı: [{"a":1,"b":"x"}]

sqlite3 -readonly ornek.db "INSERT INTO t VALUES (3, 4);"
# çıktı: Error: stepping, attempt to write a readonly database (8)

Son komutta salt okunur açılan veritabanına yazma denemesi reddedildi ve araç sıfırdan farklı bir çıkış koduyla kapandı. -init ve -cmd seçenekleri, her oturumda tekrarladığınız ayarları otomatikleştirmek için kullanılır. Aşağıdaki örnekte g.sql dosyası küçük bir tablo oluşturup tek satırı sorgular:

bash
# ayar.sql içeriği:
#   .headers on
#   .mode csv
sqlite3 -init ayar.sql :memory: < g.sql
# çıktı:
# a,b
# 1,2

sqlite3 -cmd ".mode line" :memory: < g.sql
# çıktı:
#     a = 1
#     b = 2

--ifexists seçeneği 3.51.0 sürüm notlarında hem komut satırı seçeneği hem de .open komutu için eklenmiş olarak geçer. Deneme ortamımızdaki 3.50.6 aracı bu seçeneği "unknown option" hatasıyla reddetti; daha eski bir araç kullanıyorsanız aynı sonucu görürsünüz. 3.53.0 ile gelen bir başka değişiklik de şudur: adı .sql veya .txt ile biten ve boş olmayan bir dosyaya karşılık gelen komut satırı argümanları artık betik olarak okunur. -safe seçeneğinin ayrıntıları SQLite güvenlik ayarları yazısında, çıktı biçimleri ise .mode çıktı biçimleri yazısında anlatılıyor.

Sunucuda SQLite: dosya konumu ve izinler

SQLite veritabanı sıradan bir dosya olduğu için sunucu tarafındaki asıl kurulum işi dosyanın nerede durduğu ve kimin erişebildiğidir. Belgelere göre geri alma günlüğü (adı veritabanı dosyasının adına -journal eklenerek oluşur), WAL dosyası (-wal) ve paylaşılan bellek dosyası (-shm) her zaman veritabanı dosyasıyla aynı dizinde tutulur. Bu yüzden uygulamanızı çalıştıran kullanıcının yalnızca .db dosyasına değil, bu yardımcı dosyaların oluşturulabileceği dizine de yazma izni olması gerekir. WAL modunda bir veritabanını açan sürecin -shm dosyasına, o dosya yoksa da dizine yazabilmesi beklenir.

Çökme sonrası kalan "sıcak" günlük dosyası, veritabanı tekrar açıldığında yarım kalan işlemi geri almak için kullanılır. Bu dosya veritabanının yanında ve özgün adıyla durmalıdır; veritabanı dosyasını tek başına taşır ya da yeniden adlandırırsanız geri alma yapılamaz ve veri bozulabilir. Belgeler, dosya adlarının çökme sonrasında kaybolabildiği sistemler için her veritabanını kendi alt dizininde tutmayı da önerir.

Veritabanını uygulamanın çalıştığı makinenin yerel diskinde tutun. Belgeler, ağ dosya sistemlerinde kilitleme ve senkronizasyonun her kurulumda güvenilir çalışmadığını, bunun veritabanı bozulmasına yol açtığını açıkça yazar. Çalışan bir veritabanını düz bir dosya kopyalama komutuyla yedeklemek de güvenli değildir; doğru yöntemler SQLite yedekleme yazısında, aynı anda birden çok sürecin yazmasından kaynaklanan kilit hataları ve PRAGMA busy_timeout ayarı ise database is locked hatası yazısında anlatılıyor.

Sık yapılan hatalar

  • Noktalı virgülü unutmak: İstem ...> biçiminde devam satırına geçerse komut bitmemiştir. Satırın sonuna noktalı virgül ekleyip Enter'a basın.
  • Dosya adını yanlış yazmak: Var olmayan bir dosya adı verdiğinizde hata almazsınız; yeni ve boş bir veritabanı oluşur. .tables boş geliyorsa önce yolu kontrol edin, yeni sürümlerde --ifexists kullanın.
  • Windows yolunda ters eğik çizgi: .open komutunda c:/veri/app.db gibi düz eğik çizgi kullanın.
  • .save ile üzerine yazmak: Hedef dosya varsa onay sorulmadan değiştirilir.
  • Sürümleri karıştırmak: Komut satırı aracının sürümü, uygulamanızın kullandığı kütüphanenin sürümüyle aynı olmayabilir.

Sık Sorulan Sorular

SQLite için bir servis başlatmam gerekiyor mu?

Hayır. Ne kurulum sonrası bir servis ne de yapılandırma dosyası vardır. Uygulamanız veya sqlite3 aracı veritabanı dosyasını doğrudan açar.

Hazır derlenmiş araç ile dağıtım paketi arasında fark var mı?

İkisi de aynı kaynak koddan gelir, ancak sürüm ve derleme seçenekleri farklı olabilir. Hangi özelliklerin dahil edildiğini PRAGMA compile_options ile, sürümü sqlite3 --version ile kontrol edin.

Tarayıcıda deneyebilir miyim?

Evet. SQLite ekibi, komut satırı aracının WebAssembly ile derlenmiş bir sürümünü "fiddle" adıyla yayımlar. Belgelere göre bu ortamda aracın bütün özellikleri bulunmaz, ancak SQL denemek için yeterlidir.

Veritabanı dosyasının uzantısı önemli mi?

SQLite dosya adına bakmaz; .db, .sqlite veya başka bir uzantı kullanabilirsiniz. Önemli olan, yardımcı günlük dosyalarının aynı dizinde oluşturulabilmesi ve dosyanın yerel diskte durmasıdır.

Marka adları sahiplerine aittir. Bu yazı bağımsız bir teknik rehberdir; adı geçen kuruluşlarla bayilik veya ortaklık ilişkisi bulunduğu anlamına gelmez.

İlgili içerikler: SQLite öğrenme rehberi · SQLite CLI nokta komutları · SQLite .mode çıktı biçimleri · SQLite WAL modu · SQLite yedekleme