Transaction, bir veya daha fazla SQL işleminin tek bir birim olarak yürütülmesidir. ACID özelliklerini garanti eder.
• Atomicity: Tümü veya hiçbiri (all or nothing)
• Consistency: Tutarlılık (valid state)
• Isolation: İzolasyon (eş zamanlı işlemler)
• Durability: Kalıcılık (commit sonrası kayıp yok)
Transaction Kullanımı:
-- Transaction başlatSTART TRANSACTION;-- veyaBEGIN;-- İşlemlerUPDATE Hesaplar SET bakiye = bakiye - 1000WHERE hesap_id = 1;UPDATE Hesaplar SET bakiye = bakiye + 1000WHERE hesap_id = 2;-- Başarılıysa onaylaCOMMIT;-- Hata varsa geri alROLLBACK;
Savepoint - Kısmi Geri Alma:
START TRANSACTION;INSERT INTO Ogrenciler ...;SAVEPOINT sp1;UPDATE Ogrenciler ...;-- sp1'e geri dön (INSERT kalır, UPDATE iptal)ROLLBACK TO sp1;COMMIT;
İzolasyon Seviyeleri:
READ COMMITTED: Sadece commit edilmiş veri (PostgreSQL default)
REPEATABLE READ: Aynı transaction'da tutarlı okuma (MySQL default)
SERIALIZABLE: En yüksek izolasyon, en yavaş
-- İzolasyon seviyesi ayarlaSET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Exclusive Lock (X): Yazma kilidi, tek kullanıcı
FOR UPDATE: Explicit lock
SELECT ... FOR UPDATE; -- Satırı kilitle
View'lar (Görünümler)
View, saklı bir sorgu (virtual table). Gerçek veri saklamaz, sorgu çalıştırır.
View Oluşturma:
-- Basit viewCREATE VIEW OgrenciDetay ASSELECT ad, soyad, bolum_id, not, ROW_NUMBER() OVER (PARTITION BY bolum_id ORDER BY not DESC) AS siralamaFROM OgrenciNotlari;-- Kümülatif toplamSELECT tarih, tutar, SUM(tutar) OVER (ORDER BY tarih) AS kumulatifFROM Satislar;
JSON Desteği:
-- JSON sütunuCREATE TABLE Kullanicilar ( id INT PRIMARY KEY, ad VARCHAR(100), ayarlar JSON);-- JSON veri eklemeINSERT INTO Kullanicilar VALUES(1, 'Ali', '{"tema": "dark", "dil": "tr"}');-- JSON sorgularıSELECT ad, ayarlar->>'$.tema' AS temaFROM KullanicilarWHERE ayarlar->>'$.dil' = 'tr';
YANLIŞ: "SELECT * FROM users WHERE name = '" + userInput + "'"
DOĞRU: Prepared statements / parameterized queries kullanın
PHP: $stmt->bind_param("s", $name);
Python: cursor.execute("SELECT * FROM users WHERE name = %s", (name,))
SQL Ustası Olun
SQL, veri yönetiminin evrensel dilidir. Her yazılım geliştiricisinin bilmesi gereken temel beceridir.
Orta: Subquery, index, transaction, view
İleri: Optimizasyon, stored procedure, trigger, window function
Uzman: Query tuning, sharding, replication, backup stratejileri
• LeetCode Database: SQL problemleri
• HackerRank SQL: Interaktif alıştırmalar
• SQLZoo: Tutorial + practice
• Mode Analytics: Gerçek veri setleri
• W3Schools SQL: Başlangıç dostu
• PostgreSQL Tutorial: İleri seviye
✗ WHERE olmadan UPDATE/DELETE
✗ N+1 query problemi
✗ SELECT * kullanımı
✗ İndeks eksikliği
✗ SQL injection güvenlik açığı
✗ Transaction kullanmamak
✗ EXPLAIN ile analiz yapmamak
SELECT knowledge FROM experience;
Veri yönetiminin dilini öğrendiniz!
• Gerçek projeler üzerinde çalışın
• EXPLAIN kullanmayı alışkanlık haline getirin
• Database design pattern'lerini öğrenin
• Veritabanı yedekleme stratejileri öğrenin
• Farklı DBMS'leri (MySQL, PostgreSQL, SQL Server) deneyin