SQLite öğrenmenin en hızlı yolu, sqlite3 komut satırı aracını kurup tek bir dosyada tablo oluşturmak, veri ekleyip sorgulamak ve ardından tip sistemi, indeksler, işlemler ve bakım konularına sırayla geçmektir. Bu sayfa, SQLite üzerine hazırladığımız 49 yazıyı sekiz basamaklı bir öğrenme yoluna yerleştirir; her bağlantının yanında o yazının neyi anlattığını kısaca bulabilirsiniz.
SQLite'ın ne olduğu, sunucusuz mimarisi ve hangi durumlarda istemci-sunucu veritabanlarına tercih edileceği gibi genel sorular için SQLite nedir yazımıza bakabilirsiniz. Bu rehberdeki yazılar o genel tanıtımın üzerine kurulur ve doğrudan uygulamaya odaklanır: komutları yazar, çıktıları gösterir, sık yapılan hataları ve sürüm farklarını resmî belgelere dayanarak açıklar.
Bu rehberi nasıl kullanmalısınız
Yazılar birbirinden bağımsız okunabilecek biçimde yazıldı, ancak aşağıdaki sıra bilinçli olarak seçildi. Önce aracı kurup komut satırında rahat çalışmayı öğrenirsiniz; sonra SQLite'ın diğer veritabanlarından en çok ayrıldığı nokta olan esnek tip sistemini kavrarsınız. Sorgu yazma, fonksiyonlar ve şema tasarımı bu temelin üzerine oturur. Performans, işlemler, bakım ve güvenlik yazıları ise uygulamanızı canlıya almadan önce okumanız gereken bölümlerdir.
Her yazıdaki SQL örneklerini doğrudan sqlite3 istemine yapıştırabilirsiniz. Denemeler için kalıcı bir dosya açmanız gerekmez: komut satırı aracı dosya adı verilmeden başlatıldığında geçici, bellekte duran bir veritabanı kullanır ve program kapanınca bu veritabanı silinir. Kalıcı çalışmak istediğinizde dosya adını vermeniz yeterlidir; dosya yoksa otomatik olarak oluşturulur.
sqlite3 :memory: # dosyasız, geçici bir veritabanı
sqlite3 deneme.db # dosya yoksa oluşturur, varsa açarAşağıdaki küçük oturum, serinin ilk basamağında öğreneceğiniz her şeyi tek bakışta gösterir: tablo oluşturma, varsayılan değer, otomatik artan kimlik, sıralı sorgu ve sürüm bilgisini okuma.
CREATE TABLE notlar(
id INTEGER PRIMARY KEY,
baslik TEXT NOT NULL,
oncelik INTEGER DEFAULT 3
);
INSERT INTO notlar(baslik) VALUES ('SQLite kur');
INSERT INTO notlar(baslik, oncelik) VALUES ('İlk tabloyu oluştur', 1);
SELECT id, baslik, oncelik FROM notlar ORDER BY oncelik;
-- çıktı:
-- 2|İlk tabloyu oluştur|1
-- 1|SQLite kur|3
SELECT count(*) FROM notlar;
-- çıktı: 2
SELECT sqlite_version();
-- çıktı: 3.50.6 (sizin kurulumunuzda farklı bir sürüm görünebilir)Burada id sütununa değer vermediğimiz hâlde SQLite her satıra bir tamsayı atadı; çünkü INTEGER PRIMARY KEY olarak tanımlanan sütun satırın gizli kimliği olan rowid değerinin takma adıdır. oncelik sütunu verilmeyen satırda DEFAULT 3 değerini aldı. Bu ayrıntıların her biri ilgili yazıda derinlemesine ele alınıyor.
Sürümler hakkında bir not
Bu yazılardaki bilgiler SQLite 3.54.1 belgelerinden alındı. Kod örnekleri SQLite 3.50.6 komut satırı aracıyla, tam metin arama ve matematik fonksiyonları gibi bu derlemede bulunmayan özellikler ise SQLite 3.45.3 ile çalıştırıldı. Arada görünür etkisi olan iki değişiklik var: 3.53.0 sürümüyle komut satırının tablo biçimli çıktıları yeni bir biçimlendiriciye geçti ve ondalık sayıların metne çevrilmesi 15 yerine 17 anlamlı basamakla yapılmaya başlandı. Bu nedenle kendi ekranınızda kutu çizgileri, hizalama veya ondalık sayıların son basamakları farklı görünebilir. Ayrıntılar için SQLite 3.53 yenilikleri, SQLite 3.54 yenilikleri ve .mode çıktı biçimleri yazılarına bakın.
Sürümünüzü öğrenmek için sqlite3 --version komutunu veya yukarıdaki sqlite_version() fonksiyonunu kullanın. Uygulamanızın kullandığı SQLite kütüphanesi ile komut satırındaki aracın sürümü aynı olmak zorunda değildir; programlama dili bağlayıcıları çoğu zaman kendi kopyalarını taşır. Yeni bir özelliği kullanmadan önce her iki tarafın sürümünü de kontrol etmek iyi bir alışkanlıktır.
1. Başlangıç: araç, tipler ve temel komutlar

İlk basamakta SQLite ile konuşmayı öğrenirsiniz. Bu altı yazıyı bitirdiğinizde bir veritabanı dosyası oluşturabilir, tablo tanımlayabilir, veri ekleyip güncelleyebilir ve sonuçları istediğiniz biçimde dışarı aktarabilirsiniz.
- SQLite kurulumu ve sqlite3 komut satırı: İndirme sayfasındaki dosya adlarını okumayı, Linux'ta kaynak koddan derlemeyi, ilk oturumu ve en çok kullanılan komut satırı seçeneklerini anlatır.
- SQLite CLI nokta komutları:
.tables,.schema,.read,.once,.dumpgibi komutların kurallarını ve kabuk betiklerindesqlite3kullanımını gösterir. - SQLite .mode çıktı biçimleri: list, csv, json, line, insert ve kutu biçimli çıktıları, 3.53 ile gelen yeni biçimlendiriciyi ve eski komutlarla farklarını açıklar.
- SQLite veri tipleri ve type affinity: Beş depolama sınıfını, sütun eğilimi (affinity) kurallarını, karşılaştırmadaki tip dönüşümlerini ve CAST davranışını örneklerle inceler.
- SQLite CREATE TABLE ve kısıtlamalar: Sütun tanımlarını, DEFAULT, NOT NULL, UNIQUE ve CHECK kısıtlarını, IF NOT EXISTS ve CREATE TABLE AS inceliklerini anlatır.
- SQLite INSERT, UPDATE, DELETE: Çok satırlı ekleme, INSERT SELECT, UPDATE FROM ve RETURNING ile değiştirilen satırları geri alma konularını kapsar.
2. Sorgular: veriyi okumak ve birleştirmek

İkinci basamak SELECT ifadesinin bütün parçalarını ele alır. Raporlama, analiz ve uygulama ekranlarındaki listelerin neredeyse tamamı bu yazılardaki tekniklerle yazılır.
- SQLite SELECT, WHERE, ORDER BY, LIMIT: Sorgunun çekirdeğini, sıralamada NULLS FIRST ve NULLS LAST seçeneklerini, sayfalama ve UNION, INTERSECT, EXCEPT birleşimlerini anlatır.
- SQLite JOIN türleri: INNER, LEFT, RIGHT, FULL, CROSS ve NATURAL birleştirmelerini, USING kullanımını ve aralarındaki farkları örnekler.
- SQLite GROUP BY ve aggregate fonksiyonlar: count, sum, total, avg, group_concat gibi toplama fonksiyonlarını, HAVING ve FILTER yan tümcelerini açıklar.
- SQLite WITH ve recursive CTE: Ortak tablo ifadelerini, MATERIALIZED ipucunu ve ağaç ya da hiyerarşi gezen özyinelemeli sorguları gösterir.
- SQLite window fonksiyonları: OVER, PARTITION BY ve çerçeve tanımlarını, row_number, rank, lag, lead ve ntile fonksiyonlarını işler.
- SQLite NULL davranışı: NULL karşılaştırmalarını, IS ve IS NOT işleçlerini, coalesce, ifnull ve nullif fonksiyonlarını ve UNIQUE sütunlarda NULL durumunu anlatır.
- SQLite tabloları listeleme: sqlite_schema tablosu ve table_info, table_list gibi pragma fonksiyonlarıyla tablo ve sütun listesini almayı gösterir.
3. Fonksiyonlar: metin, tarih, sayı ve JSON
Üçüncü basamakta SQLite'ın yerleşik fonksiyonlarını tanırsınız. Türkçe metinlerle çalışırken büyük-küçük harf davranışının sınırlarını bilmek özellikle önemlidir; bu konuya üç ayrı yazıda değiniliyor.
- SQLite metin fonksiyonları: substr, instr, replace, trim, length, concat, format ve printf gibi metin işleme fonksiyonlarını örneklerle açıklar.
- SQLite LIKE, GLOB ve REGEXP: Desen eşleştirme işleçlerini, ESCAPE kullanımını, case_sensitive_like ayarını ve LIKE sorgularının indeksten yararlanma koşullarını anlatır.
- SQLite COLLATE ve NOCASE: BINARY, NOCASE ve RTRIM sıralama kurallarını ve bunların Türkçe harflerle çalışırken nerede yetersiz kaldığını gösterir.
- SQLite tarih ve saat fonksiyonları: date, time, datetime, julianday, unixepoch, strftime ve timediff fonksiyonlarını ve değiştiricileri işler.
- SQLite matematik fonksiyonları: round, abs ve matematik fonksiyonlarını, ondalık sayı davranışını ve 3.53 ile gelen 17 basamak değişikliğini açıklar.
- SQLite JSON fonksiyonları: json_extract, -> ve ->> işleçleri, json_set ailesi, json_each ile JSONB biçimini anlatır.
4. Şema tasarımı: anahtarlar, tipler ve ilişkiler
Dördüncü basamak, tablolarınızı ilk günden doğru kurmanız için gereken kararları toplar. Birincil anahtar seçimi, katı tip denetimi ve yabancı anahtarlar sonradan değiştirmesi zahmetli konulardır.
- SQLite PRIMARY KEY, rowid ve AUTOINCREMENT: INTEGER PRIMARY KEY ile rowid ilişkisini, AUTOINCREMENT'ın gerçekte ne yaptığını ve sqlite_sequence tablosunu açıklar.
- SQLite WITHOUT ROWID tablolar: rowid'siz tabloların ne zaman işe yaradığını, sıradan tablolardan farklarını ve sınırlarını anlatır.
- SQLite STRICT tablolar: Katı tip denetimi yapan STRICT tabloları, ANY tipini ve esnek tiplemenin gerekçesini inceler.
- SQLite foreign key: PRAGMA foreign_keys ayarını, ON DELETE ve ON UPDATE eylemlerini, ertelenmiş denetimi ve foreign_key_check komutunu gösterir.
- SQLite generated columns: VIRTUAL ve STORED hesaplanan sütunları, kısıtlarını ve bu sütunları indekslemeyi anlatır.
- SQLite ALTER TABLE: Tablo ve sütun yeniden adlandırmayı, sütun ekleyip silmeyi ve ALTER TABLE'ın yapamadığı değişiklikler için 12 adımlı yöntemi açıklar.
5. Şema evrimi ve ifadeler: göç, görünüm, tetikleyici ve indeks
Beşinci basamak, yaşayan bir uygulamanın şemasını güvenle değiştirmeyi ve veritabanının kendi içinde iş kuralı çalıştırmasını sağlayan araçları kapsar.
- SQLite şema göçü ve user_version: PRAGMA user_version ile sürümlü şema göçü kurmayı ve göçleri işlem içinde güvenle çalıştırmayı gösterir.
- SQLite CREATE VIEW: Görünüm oluşturmayı, sütun adlarını, görünümlerin salt okunur olmasını ve INSTEAD OF tetikleyicilerle yazılabilir hâle getirmeyi anlatır.
- SQLite trigger: BEFORE, AFTER ve INSTEAD OF tetikleyicilerini, NEW ve OLD satırlarını, WHEN koşulunu ve RAISE() fonksiyonunu işler.
- SQLite UPSERT ve ON CONFLICT: ON CONFLICT DO UPDATE ve DO NOTHING kullanımını, excluded tablosunu ve REPLACE ile farkını açıklar.
- SQLite index oluşturma: CREATE INDEX, benzersiz ve çok sütunlu indeksleri, kapsayan (covering) indeksi ve DROP INDEX komutunu anlatır.
- SQLite partial index ve ifade indeksi: Kısmi indeksleri, ifade indekslerini, bayat ifade indeksi sorununu ve REINDEX komutunu inceler.
6. Performans ve işlemler

Altıncı basamak, sorgularınızın neden yavaş olduğunu anlamanızı ve eşzamanlı erişimde veriyi tutarlı tutmanızı sağlar. Sunucuda SQLite çalıştıracaksanız bu bölümü atlamayın.
- SQLite EXPLAIN QUERY PLAN: Sorgu planı çıktısında SCAN ve SEARCH satırlarını okumayı, geçici B-ağaçlarını ve .eqp ile .expert komutlarını anlatır.
- SQLite ANALYZE ve sorgu planlayıcı: İstatistik toplamayı, sqlite_stat1 tablosunu, PRAGMA optimize komutunu ve INDEXED BY ipucunu açıklar.
- SQLite transaction ve SAVEPOINT: BEGIN DEFERRED, IMMEDIATE ve EXCLUSIVE farkını, iç içe SAVEPOINT kullanımını ve yalıtım davranışını işler.
- SQLite WAL modu: journal_mode ayarını, -wal ve -shm dosyalarının görevini ve checkpoint işlemini anlatır.
- SQLite PRAGMA komutları: PRAGMA söz dizimini, sık kullanılan pragmaları, tablo değerli pragma fonksiyonlarını ve kalıcı ile bağlantıya özel ayarları ayırt etmeyi gösterir.
- SQLite performans ayarları: synchronous, cache_size, temp_store ve mmap_size ayarlarını, toplu yazmada işlem gruplamayı ve N+1 sorgu meselesini ele alır.
7. Bakım ve eklentiler
Yedinci basamak, veritabanınızı uzun süre sağlıklı tutmayı ve SQLite'ın tam metin arama ile konumsal indeks gibi eklentilerini kullanmayı öğretir.
- SQLite yedekleme: .backup komutunu, VACUUM INTO ile anlık kopya almayı, sqlite3_rsync aracını ve çalışan bir veritabanını güvenle kopyalamayı anlatır.
- SQLite VACUUM ve auto_vacuum: Boş sayfaları geri kazanmayı, auto_vacuum ve incremental_vacuum ayarlarını ve dosya boyutunu izlemeyi açıklar.
- SQLite CSV içe ve dışa aktarma: .import ile CSV yüklemeyi, .mode csv ve .once ile dışa aktarmayı ve elektronik tabloya hızlı aktarımı gösterir.
- SQLite ATTACH DATABASE: Birden fazla veritabanı dosyasını aynı bağlantıda açmayı, şema adlarını ve dosyalar arasında tablo kopyalamayı anlatır.
- SQLite FTS5 tam metin arama: FTS5 sanal tablolarını, MATCH söz dizimini, bm25 sıralamasını, highlight ve snippet fonksiyonlarını ve ayrıştırıcı seçeneklerini işler.
- SQLite R-Tree konumsal indeks: R*Tree tablolarıyla sınır kutusu sorgularını, yardımcı sütunları ve tamsayı R-Tree kullanımını açıklar.
8. Güvenlik, hatalar ve sürümler
Son basamak, ters giden durumlar içindir: güvenilmeyen dosya ve SQL ile çalışmak, bozulan bir veritabanını kurtarmak, kilit hatalarını çözmek ve sürüm geçişlerinde nelerin değiştiğini takip etmek.
- SQLite güvenlik ayarları: Güvenilmeyen veritabanı dosyaları ve SQL metinleri için --safe kipini, trusted_schema ve cell_size_check gibi savunma ayarlarını anlatır.
- SQLite bozuk veritabanı kurtarma: Bozulmanın tipik nedenlerini, integrity_check ve quick_check denetimlerini ve .recover ile veri kurtarmayı açıklar.
- SQLite database is locked hatası: Kilitlenme modelini, SQLITE_BUSY ile SQLITE_LOCKED farkını, busy_timeout ayarını ve ağ dosya sistemlerinin riskini işler.
- SQLite hata kodları: Birincil ve genişletilmiş sonuç kodlarını ve constraint failed, no such table, readonly gibi sık hata mesajlarının anlamını gösterir.
- SQLite 3.53 yenilikleri: ALTER TABLE ile NOT NULL ve CHECK ekleme, REINDEX EXPRESSIONS, json_array_insert ve komut satırındaki yeni biçimlendiriciyi özetler.
- SQLite 3.54 yenilikleri: Yeni komut satırı istemini, diskused() fonksiyonunu, format() içindeki %J dönüşümünü ve yeni tarih değiştiricilerini anlatır.
Hangi yazıdan başlamalısınız
Herkes için ortak başlangıç noktası kurulum yazısı ve tip sistemi yazısıdır. Sonrası amacınıza göre değişir. Bir web uygulaması geliştiriyorsanız CREATE TABLE, indeks ve transaction yazıları öncelikli olmalı. Programlama dilinden SQLite kullanıyorsanız bağlayıcıya özgü ayrıntılar için Python sqlite3, Node.js node:sqlite ve PHP PDO yazılarımıza bakabilirsiniz.
Sunucu yöneticisiyseniz önce WAL modu, database is locked ve yedekleme yazılarını okuyun. SQLite belgeleri, veritabanı dosyasını ağ üzerinden paylaşılan bir dosya sisteminde tutmanın kilitleme ve senkronizasyon sorunları nedeniyle bozulmaya yol açabileceği konusunda açıkça uyarır; veritabanını uygulamanın çalıştığı makinenin yerel diskinde tutmak bu yüzden temel kuraldır.
MySQL veya PostgreSQL deneyimiyle geliyorsanız SQLite'ın bilinçli olarak farklı davrandığı noktaları erkenden öğrenmeniz işinizi kolaylaştırır: yabancı anahtar denetimi varsayılan olarak kapalıdır, çoğu PRIMARY KEY sütunu NULL kabul eder, ve sütun tipleri zorunlu değil, önerilen bir tercih niteliğindedir. Bunlar sırasıyla foreign key, CREATE TABLE ve veri tipleri yazılarında ayrıntılı işleniyor; diğer veritabanlarındaki gibi katı tip denetimi istiyorsanız STRICT tablolar yazısına geçin. Genel SQL bilgisi için SQL nedir, farklı veritabanı aileleri arasında karşılaştırma için veritabanı türleri rehberi yazısına göz atabilirsiniz.
Sık Sorulan Sorular
SQLite öğrenmek için bir sunucu kurmam gerekir mi?
Hayır. SQLite ayrı bir sunucu süreci çalıştırmaz; veritabanı sıradan bir dosyadır ve sqlite3 programı bu dosyayı doğrudan açar. Deneme yapmak için tarayıcıda çalışan resmî WASM sürümünü de kullanabilirsiniz; ancak belgelere göre bu ortamda komut satırı aracının bütün özellikleri bulunmaz.
Yazılardaki çıktılar neden benim ekranımdan farklı görünüyor?
Örnekler betik (batch) modunda çalıştırıldı ve sonuçlar | ile ayrılmış list biçiminde gösterildi. 3.53 ve sonraki sürümlerde etkileşimli oturumun varsayılan çıktısı kutu çizgili bir tablodur ve ondalık sayılar daha fazla basamakla yazılabilir. Aynı görünümü elde etmek için oturumda .mode list komutunu verebilirsiniz.
Hangi sırayla okumalıyım?
Başlangıç bölümündeki altı yazıyı sırayla okumanızı öneririz. Sonraki bölümler kendi içinde bütünlüklüdür; ihtiyacınız olan konuya doğrudan atlayabilirsiniz. Her yazının sonunda ilgili yazılara bağlantılar bulunur.
Belgelerdeki bir özellik benim sürümümde çalışmıyor, neden?
SQLite sürekli gelişir ve bazı özellikler derleme seçeneklerine bağlıdır. Örneğin tam metin arama, R-Tree ve matematik fonksiyonları her derlemede bulunmaz. Yazılarda yeni bir özelliği anlatırken hangi sürümde eklendiğini sürüm notlarına dayanarak belirttik; kendi sürümünüzü sqlite_version() ile kontrol edin.
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 nedir · SQLite kurulumu · SQLite CLI nokta komutları · SQLite veri tipleri · SQL nedir