🔴 Transaction Yapısı

Transaction Yapısı: Transaction'ı bir nikâh töreni gibi düşün: 'evet' iki taraftan da gelmeden kimse evli sayılmaz, biri yarıda vazgeçerse tören yarım kalmaz — hiç olmamış sayılı

Transaction'ı bir nikâh töreni gibi düşün: 'evet' iki taraftan da gelmeden kimse evli sayılmaz, biri yarıda vazgeçerse tören yarım kalmaz — hiç olmamış sayılır. Havalede de aynısı geçerlidir: paranın A hesabından çıkması VE B hesabına girmesi tek bir bütündür; ikisinin arasında elektrik kesilirse veritabanı yarım işi kabul etmez, `ROLLBACK` ile başlangıç anına döner. Peki 'yarım kalırsa geri al' fikri bu kadar bariz iken, neden bunu uygulama kodunda kendimiz yapamıyoruz — hata yakalayıp ters UPDATE atmak yetmez mi? Yetmez, ve nedeni düşündürücüdür: telafi kodunun kendisi de çökebilir. Para çıktıktan sonra process öldüyse, o telafi UPDATE'ini çalıştıracak kimse kalmamıştır. Transaction'ın gücü, garantiyi **senin kodundan alıp** veritabanının kendi kurtarma günlüğüne (WAL/redo log) taşımasıdır — orada sözü tutacak olan, çöken sürecin kendisi değildir. Java'daki `synchronized` bloğu yüzeyde benzer görünür ama farkı bilmek kritiktir: `synchronized` sadece **izolasyon** verir (aynı anda iki thread girmesin), atomiklik veya kalıcılık vermez — JVM çökerse yarım kalan iş yarım kalır. Transaction ACID'in dördünü birden verir: Atomic, Consistent, Isolated, Durable. QA tarafında transaction en çok test verisi hazırlarken işe yarar ve en çok orada unutulur: `BEGIN` ile açılıp `COMMIT`/`ROLLBACK` ile kapatılmayan bir session, tabloyu kilitli bırakır ve o tabloya dokunan diğer bütün testler timeout ile düşer. Sabah gelip 'dün gece 40 test aynı anda kırılmış' dediğin senaryoların klasik sebebi budur — testlerin hiçbiri bozuk değildir, biri kilidi bırakmamıştır. Tersi de bir tekniktir: testi transaction içinde koşup sonunda `ROLLBACK` çekmek, veritabanını test öncesi hâline birebir döndürür.

Transaction'lar — ACID Özellikleri

Micro Lab: SQL — GROUP BY / CTE / Window

TODO satirini beklenen cozumdeki kritik satirla degistir. Bu gercek runtime degil; amac dogru yapinin yazilmasini kontrollu olarak pekistirmek.

Adim Adim: SQL — GROUP BY / CTE / Window

Aggregation mi Window mi?

Aggregation (ozetleme) mi Window (satir bazli hesap) mi? Onu belirle

Aggregation icin GROUP BY ile ozetlenecek sutunu sec

HAVING ile gruplara kosul uygula — WHERE gibi ama agregasyon sonrasinda

WITH cte_adi AS (...) SELECT ... FROM cte_adi ile sorguyu modülerlestir

OVER(PARTITION BY) ekle

Window icin SUM(col) OVER (PARTITION BY bolum ORDER BY siralama) kullan

SQL GROUP BY ve Window Function sorgusu yazma sirasi nedir?

Transaction Yönetimi ve ACID Prensipleri