SQLite Dokümantasyonu
Kısa ve örneklerle anlatılan SQLite kaynağı. Kavramı oku, kodu gör, sonra Coddy yolculuğunda uygula.
Rehberli bir SQLite yolculuğuna başlaBaşlangıç
- SQLite NedirSQLite, uygulamanızın içinde çalışan, sunucu gerektirmeyen, tek dosyaya sığan bir SQL veritabanıdır. Ne işe yaradığını, klasik veritabanlarından farkını ve hangi senaryolarda parladığını anlatıyoruz.
- SQLite vs MySQLSQLite ile MySQL gerçekte nerede ayrışıyor? Mimari, eşzamanlılık, veri tipleri ve hangi proje için hangisinin daha mantıklı olduğunu konuşalım.
- SQLite vs PostgresSQLite ile PostgreSQL arasındaki gerçek farklar: mimari, eşzamanlılık, tip sistemi ve hangi proje için hangisinin daha mantıklı olduğu.
- SQLite Ne Zaman KullanılırSQLite hangi projelerde doğru tercih, nerede yetersiz kalıyor? Postgres veya MySQL'e ne zaman geçmeniz gerektiğini pratik örneklerle anlatıyoruz.
- SQLite KurulumuWindows, macOS ve Linux'ta SQLite nasıl kurulur? Komut satırı aracını indirme, PATH'e ekleme ve kurulumun sorunsuz çalıştığını doğrulama adımları.
- SQLite CLITerminalden çıkmadan sqlite3 komut satırını nasıl kullanırsınız: veritabanı açma, sorgu çalıştırma, dot komutları ve CSV içe/dışa aktarma işlemleri tek tek anlatılıyor.
- GUI AraçlarıSQLite veritabanı dosyalarını açmak, içeriğine bakmak ve düzenlemek için kullanılan GUI araçlarına pratik bir bakış: DB Browser for SQLite, SQLiteStudio ve online görüntüleyiciler.
- Veritabanı OluşturmaSQLite'ta veritabanı nasıl oluşturulur? Dosya tabanlı mantık, `sqlite3` komutu ve neden `CREATE DATABASE` ifadesinin olmadığı tek yazıda.
- In-Memory DatabaseSQLite in-memory database nasıl çalışır, `:memory:` ne zaman işe yarar ve diske yazılan bir veritabanından farkı nedir? Pratik örneklerle anlattık.
Tablolar ve tipler
- CREATE TABLESQLite'ta tablo oluşturmanın tüm yolları: kolon tanımları, kısıtlar, IF NOT EXISTS, geçici tablolar ve CREATE TABLE AS SELECT örnekleri.
- Veri TipleriSQLite değerleri nasıl saklıyor? Beş depolama sınıfı, dinamik tiplemenin mantığı ve Postgres ya da MySQL'den gelenleri şaşırtan ince ayrıntılar.
- Type AffinitySQLite'ın type affinity sistemi nasıl çalışır? Beş affinity türü, CREATE TABLE'da yazdığınız tipten hangisinin seçildiği ve neden bir INTEGER sütunun string tutabildiği.
- STRICT TablesSQLite'ın STRICT tabloları, esnek tip depolamayı kapatıp uyumsuz değerleri reddediyor ve aslında baştan beri beklediğiniz tip kontrolünü size sunuyor.
- Primary KeySQLite'ta primary key nasıl çalışır? INTEGER PRIMARY KEY, composite key, AUTOINCREMENT ve yeni başlayanları şaşırtan o meşhur NULL detayı.
- ROWIDSQLite'ta ROWID gerçekte nedir, INTEGER PRIMARY KEY tanımı onu nasıl sizin sütununuz haline getirir ve WITHOUT ROWID tabloları neden vardır?
- NOT NULL ve DEFAULTSQLite'ta NOT NULL ve DEFAULT nasıl çalışır? Zorunlu sütunlar, varsayılan değerler, CURRENT_TIMESTAMP hilesi ve mevcut tablolara eklerken karşılaşacağınız tuzaklar.
- CHECK ConstraintSQLite'ta CHECK constraint ile sütun değerlerine kural koymayı öğrenin: tek sütunlu kontroller, çok sütunlu kurallar, isimlendirilmiş constraint'ler ve dikkat edilmesi gereken noktalar.
- UNIQUE KısıtlamasıSQLite'ta UNIQUE kısıtlaması nasıl çalışır? Sütun ve tablo seviyesinde tanım, bileşik anahtarlar, NULL'ın tuhaf davranışı ve hata aldığınızda yapılacaklar.
- DROP & ALTER TABLESQLite'ta tablo silme, yeniden adlandırma ve değiştirme işlemleri: ALTER TABLE neyi yapar, neyi yapamaz ve yapamadıklarını çözen tablo yeniden oluşturma yöntemi.
Veri ekleme ve değiştirme
- INSERTSQLite'ta INSERT komutunun çalışma mantığı: tek satır ekleme, toplu insert, INSERT...SELECT, varsayılan değerler ve OR IGNORE / OR REPLACE çakışma çözümleri.
- UPDATESQLite'ta mevcut satırları güncellemenin yolu: UPDATE söz dizimi, sizi felaketten koruyan WHERE kullanımı, birden fazla sütunu aynı anda değiştirme ve tablolar arası düzenleme için UPDATE ... FROM.
- DELETESQLite'ta DELETE komutu nasıl çalışır? Güvenli WHERE kullanımı, tüm satırları silme, ilişkili tablolarda cascade ve RETURNING ile silinen satırları geri alma.
- UPSERTSQLite'ta UPSERT nasıl çalışır? ON CONFLICT cümlesi, excluded sözde tablosu, DO NOTHING ile DO UPDATE farkı ve INSERT OR REPLACE'e neden tercih edilmeli.
- RETURNING CümlesiSQLite'ta RETURNING cümlesinin nasıl çalıştığını öğrenin: INSERT, UPDATE veya DELETE'in etkilediği satırları ikinci bir sorgu çekmeden tek seferde geri alın.
- CSV ImportSQLite'a CSV dosyası nasıl aktarılır? .import komutuyla başlık satırı, mevcut tablolar, özel ayraçlar ve sık karşılaşılan hatalar üzerinden adım adım anlatım.
- Veri Dışa Aktarmasqlite3 komut satırı üzerinden CSV (başlıklı), JSON, tam SQL dump ve tek tablo yedeği almanın pratik yolları.
Veri sorgulama
- SELECT TemelleriSQLite'ta SELECT ifadesi nasıl çalışır? Sütun seçme, ifade hesaplama, AS ile takma ad verme ve yazacağınız her sorgunun arkasındaki mantığı baştan kuralım.
- WHERE KoşuluSQLite'ta WHERE ile satırları nasıl filtrelersiniz? Karşılaştırma operatörleri, AND/OR, LIKE, IN, BETWEEN ve herkesin takıldığı NULL tuzağı tek yazıda.
- Operatörler ve NULLSQLite'ta NULL değerler operatörlerle nasıl çalışır? `=` ve `<>` neden beklediğiniz gibi davranmaz, IS NULL, COALESCE ve IFNULL ne zaman devreye girer — hepsi örneklerle.
- ORDER BYSQLite'ta ORDER BY nasıl çalışır? Artan ve azalan sıralama, birden fazla sütunla sıralama, NULL değerlerin yeri ve büyük/küçük harfe duyarsız sıralama.
- LIMIT ve OFFSETSQLite'ta LIMIT ve OFFSET nasıl çalışır? Satır sınırlama, satır atlama, güvenli sayfalama ve büyük tablolarda dikkat etmeniz gereken performans tuzağı.
- DISTINCTSQLite'ta SELECT DISTINCT nasıl çalışır? Tek kolon, çoklu kolon, NULL davranışı, COUNT(DISTINCT) ve GROUP BY'ın daha mantıklı olduğu durumlar.
- CASE İfadeleriSQLite'ta CASE nasıl çalışır? Basit ve aranan (searched) form, SELECT, ORDER BY ve WHERE içinde kullanım, ayrıca IIF ne zaman daha mantıklı — hepsi örneklerle.
Fonksiyonlar ve agregatlar
- String FonksiyonlarıSQLite'ta metinle çalışmanın pratik yolları: birleştirme, SUBSTR, INSTR, REPLACE, TRIM ve sorgularda metin temizleme kalıpları.
- Sayısal FonksiyonlarSQLite'ta aritmetik işlemler nasıl yapılır? ROUND, ABS, CEIL, FLOOR, MOD, POWER, SQRT, RANDOM ve herkesin bir kez düştüğü tam sayı bölme tuzağı.
- Tarih ve SaatSQLite tarihleri nasıl saklar ve işler? Beş tarih fonksiyonu, format dizeleri, modifier'lar ve sorgularınızı hızlı tutacak depolama tercihleri.
- Aggregate FonksiyonlarSQLite'ta aggregate fonksiyonlar birden fazla satırı tek bir değere nasıl indirger? COUNT, SUM, AVG, MIN, MAX, GROUP_CONCAT ve DISTINCT, FILTER ile NULL davranışı.
- GROUP BY & HAVINGSQLite'ta GROUP BY satırları nasıl gruplara ayırır, HAVING bu grupları toplama işleminden sonra nasıl filtreler? WHERE ile HAVING arasındaki farkı somut örneklerle netleştiriyoruz.
İlişkiler ve join'ler
- Foreign KeySQLite'ta foreign key nasıl çalışır? REFERENCES tanımı, PRAGMA ile kısıtlamayı aktif etme ve doğru ON DELETE davranışını seçme rehberi.
- INNER JOINSQLite'ta INNER JOIN nasıl çalışır? Mantığını, ON kullanımını, üç tablonun birleştirilmesini ve USING kısayolunu örneklerle anlatıyoruz.
- LEFT JOINSQLite'ta LEFT JOIN nasıl çalışır? Eşleşmeyen satırları koruma, NULL değerleri okuma, WHERE ile güvenli filtreleme ve birden fazla tabloyu birleştirme.
- Self JoinSQLite'ta self join nasıl çalışır? Aynı tabloyu takma adlarla kendisine bağlama, çalışan/yönetici örneği ve hiyerarşik veri sorgulamaları.
- SubquerySQLite'ta bir SELECT'i başka bir SELECT'in içine nasıl yerleştirirsiniz? Scalar subquery, IN/EXISTS, türetilmiş tablolar, korelasyonlu subquery'ler ve JOIN ne zaman daha okunaklı olur, hepsi burada.
- CTESQLite'ta Common Table Expression (CTE) nasıl çalışır? `WITH` ile alt sorgulara isim vermeyi, birden fazla CTE zincirlemeyi ve okunaklı sorgular yazmayı görelim.
- Recursive CTESQLite'ta recursive CTE nasıl çalışır? WITH RECURSIVE'in anchor/recursive yapısı, parent-child ağaçlarda gezinme, sayı serisi üretme ve sonsuz döngülerden kaçınma.
İndeksler ve performans
- Index'lerSQLite'ta index nasıl çalışır, ne zaman performansı uçurur, ne zaman tam tersine yavaşlatır ve planlayıcının index'i gerçekten kullanıp kullanmadığını nasıl anlarsınız?
- Composite IndexSQLite'ta çok sütunlu indekslerin nasıl çalıştığını, sütun sırasının neden bu kadar önemli olduğunu ve composite index'in ne zaman işe yaradığını, ne zaman yer kaplayan ölü ağırlığa dönüştüğünü inceliyoruz.
- Partial IndexSQLite'ta partial index nasıl çalışır? Sadece sorguladığınız satırları indeksleyerek soft delete, kısmi unique kısıtı ve sıcak veri alt kümeleri gibi senaryolarda nasıl kazanç sağladığını örneklerle anlatıyoruz.
- EXPLAIN QUERY PLANSQLite'ta EXPLAIN QUERY PLAN nasıl kullanılır? Sorgunuzun index kullanıp kullanmadığını, SCAN ve SEARCH ne anlama geldiğini ve join planlarını okumayı öğrenin.
- ANALYZE & VACUUMSQLite veritabanını hızlı ve derli toplu tutmanın iki temel yolu: `ANALYZE` ve `VACUUM`. Hangisi ne işe yarar, ne zaman çalıştırmalı ve bilmeye değer varyantları neler?
İleri düzey özellikler
- Transaction'larSQLite'ta transaction mantığı: BEGIN, COMMIT, ROLLBACK, autocommit modu ve kilitlerin ne zaman alınacağını belirleyen DEFERRED/IMMEDIATE/EXCLUSIVE farkları.
- SavepointSQLite'ta savepoint nasıl çalışır? Bir transaction'ın içine isimli işaretler koyup tamamını kaybetmeden istediğiniz noktaya dönmenin yolu.
- View'lerSQLite'ta view'ler nasıl çalışır? Sorguları sanal tablo olarak kaydetme, geçici view oluşturma ve view'lerin neden varsayılan olarak salt okunur olduğunu anlatıyoruz.
- Trigger'larSQLite trigger'ları nasıl çalışır? BEFORE, AFTER, view'lar için INSTEAD OF, OLD ve NEW satır referansları ve trigger'ı ne zaman tercih etmeli — hepsi örneklerle.
- JSON DesteğiSQLite'ta JSON verisini saklama ve sorgulama: alan çıkarma, değer güncelleme, json_each ile dizileri açma ve JSON yollarını indeksleyerek hız kazanma.
- Full-Text SearchSQLite'a FTS5 ile tam metin arama nasıl eklenir? Sanal tablo oluşturma, MATCH operatörü, BM25 sıralaması ve indeksi veriyle senkron tutmanın yolları.
- Window FonksiyonlarıSQLite'ta window fonksiyonları nasıl çalışır? OVER, PARTITION BY, sıralama fonksiyonları, LAG/LEAD ve kümülatif toplam için frame kullanımı.
- Generated ColumnsSQLite'ta generated column mantığı: tanımlama yöntemleri, VIRTUAL ile STORED arasında seçim ve hesaplanan kolonları indeksleyerek hızlı sorgular yazma.
- ATTACH DATABASEATTACH DATABASE komutuyla tek bağlantıda birden fazla SQLite dosyasını açıp şema önekleriyle birlikte nasıl sorgulayacağınızı ve işiniz bittiğinde nasıl ayıracağınızı anlatıyoruz.
Güvenlik ve uygulama entegrasyonu
- Prepared StatementsSQLite'ta prepared statement nedir, neden kullanılır ve her sürücünün arka planda sardığı prepare/bind/step/finalize döngüsü nasıl işler?
- Parametre BağlamaSQLite'ta parametre bağlama nasıl çalışır? Konumsal yer tutucular, isimli parametreler ve uygulamanızdan değerleri güvenli şekilde geçirmenin kuralları.
- SQL InjectionString birleştirmenin neden tehlikeli olduğunu, SQL injection saldırılarının nasıl çalıştığını ve SQLite'ta parametreli sorgularla bu açığı nasıl kapatacağınızı anlatıyoruz.
- Uygulama BağlantılarıUygulamalar SQLite veritabanına nasıl bağlanır? Bağlantı dizesi, dosya yolu, dillere göre sürücüler ve ilk günden doğru ayarlanması gereken seçenekler.
- MigrationsSQLite şemanızı zaman içinde güvenle nasıl evriltirsiniz? PRAGMA user_version, sıralı migration scriptleri ve transaction'larla geri alınabilir bir akış kuralım.
- WAL ve EşzamanlılıkSQLite'ın write-ahead logging özelliği eşzamanlılık tarafında oyunu nasıl değiştiriyor? Okuyucularla yazıcılar artık birbirini kilitlemiyor; peki -wal ve -shm dosyaları aslında ne işe yarıyor?
Canlı ortam ve operasyonlar
- Yedekleme ve Geri YüklemeSQLite veritabanını güvenli şekilde yedekleme ve geri yükleme: .backup komutu, VACUUM INTO, online backup API ve neden .db dosyasını kopyalamak kötü bir fikir.
- PRAGMA AyarlarıGerçekten fark yaratan PRAGMA komutları — journal_mode, synchronous, foreign_keys, busy_timeout, cache_size — ve production ortamında kullanmanız gereken değerler.
- Sık Karşılaşılan HatalarProduction'da gerçekten karşınıza çıkan SQLite hataları: database is locked, readonly database, disk image malformed, constraint hataları ve pratik çözümleri.