Veritabanı yönetim sistemlerinin temel taşlarından biri olan transactionlar, SQL dünyasında veri bütünlüğünü ve güvenilirliğini sağlayan kritik mekanizmalardır. Karmaşık işlemleri mantıksal bir birim altında toplayarak, olası hatalara veya sistem kesintilerine karşı veritabanının tutarlı bir durumda kalmasını garanti ederler. Bu sayede, aynı anda birden fazla kullanıcının veritabanı üzerinde güvenle işlem yapabilmesi mümkün olur ve kritik iş süreçleri kesintisiz devam eder.

Transaction (İşlem) Nedir?

Veritabanı bağlamında bir transaction, mantıksal olarak tek bir iş birimi olarak kabul edilen bir dizi SQL ifadesidir. Bu ifadelerin tümü ya başarılı bir şekilde tamamlanır (commit edilir) ya da hiçbiri tamamlanmaz (rollback edilir). Transactionların temel amacı, çok adımlı bir işlem sırasında veritabanının her zaman tutarlı bir durumda kalmasını sağlamaktır. Örneğin, bir banka uygulamasında bir hesaptan başka bir hesaba para transferi işlemi, hem kaynak hesaptan paranın çekilmesi hem de hedef hesaba paranın yatırılması adımlarını içerir. Bu iki adımın da birlikte başarılı olması veya herhangi bir sorun durumunda her iki adımın da geri alınması gerekliliği, transactionların önemini vurgular.

Veri Tutarlılığı ve ACID Özellikleri

Veri tutarlılığı, bir veritabanındaki verilerin belirli kurallar ve kısıtlamalar dahilinde doğru ve güncel kalması durumudur. SQL transactionları, bu tutarlılığı sağlamak için ACID adı verilen dört temel özelliğe uymak zorundadır:

1. Atomicity (Bütünlük)

Atomicity, bir transaction’daki tüm işlemlerin tek bir bütün olarak kabul edildiği anlamına gelir. Yani, bir transaction ya tamamen başarıyla tamamlanır (commit) ya da hiçbir etkisi kalmayacak şekilde tamamen geri alınır (rollback). Kısmi bir tamamlanma söz konusu değildir. Yukarıdaki banka transferi örneğinde, para bir hesaptan çekilip diğerine yatırılmadan önce sistem çökerse, Atomicity özelliği sayesinde işlem tamamen geri alınır ve her iki hesap da önceki durumlarına döner. SQL’de `BEGIN TRANSACTION` ile başlayan ve `COMMIT` veya `ROLLBACK` ile biten bloklar Atomicity prensibini uygular.


BEGIN TRANSACTION;

UPDATE Hesaplar SET Bakiye = Bakiye - 100 WHERE HesapNo = 'TR123';
-- Eğer burada bir hata olursa veya sistem çökerse
UPDATE Hesaplar SET Bakiye = Bakiye + 100 WHERE HesapNo = 'TR456';

COMMIT; -- Eğer her iki işlem de başarılı ise değişiklikler kalıcı olur.
-- ROLLBACK; -- Eğer herhangi bir hata olursa tüm işlemler geri alınır.

2. Consistency (Tutarlılık)

Consistency, bir transaction’ın veritabanını bir tutarlı durumdan alıp başka bir tutarlı duruma bırakması gerektiğini belirtir. Yani, transaction’ın başlangıcında ve sonunda veritabanında tanımlanan tüm kurallar, kısıtlamalar (primary key, foreign key, unique, check kısıtlamaları) ve tetikleyiciler geçerli olmalıdır. Örneğin, bir kullanıcının bakiyesi asla eksi bir değere düşmemelidir kuralı varsa, bir para çekme işlemi bu kuralı ihlal edemez. Consistency, Atomicity ve Isolation ile birlikte çalışarak veritabanının doğru ve güvenilir kalmasını sağlar.

3. Isolation (İzolasyon)

Isolation, eş zamanlı olarak çalışan transactionların birbirini etkilememesi gerektiği anlamına gelir. Bir transaction sanki veritabanında tek başına çalışıyormuş gibi görünmelidir. Başka bir deyişle, bir transaction devam ederken yaptığı değişiklikler, commit edilmeden önce diğer transactionlar tarafından görülemez. Bu, özellikle yüksek eş zamanlılık gerektiren sistemlerde veri tutarsızlıklarını (kirli okuma, tekrarlanamayan okuma, hayalet okuma gibi) önlemek için kritik öneme sahiptir. SQL Server, MySQL gibi veritabanları farklı izolasyon seviyeleri sunarak geliştiricilere esneklik sağlar.


-- Transaction A
BEGIN TRANSACTION;
UPDATE Urunler SET Stok = Stok - 1 WHERE UrunID = 1;
-- Transaction A henüz commit etmedi.

-- Transaction B (Aynı anda çalışıyor)
SELECT Stok FROM Urunler WHERE UrunID = 1; -- Bu sorgu, Transaction A'nın yaptığı değişikliği görmemelidir.

4. Durability (Kalıcılık)

Durability, bir transaction başarılı bir şekilde commit edildikten sonra, yapılan değişikliklerin kalıcı olacağını garanti eder. Sistem çökmesi, güç kesintisi veya başka bir donanım/yazılım hatası bile bu değişiklikleri ortadan kaldıramaz. Veritabanı sistemi, commit edilen verileri kalıcı depolama birimine (sabit disk) yazarak veya günlük kayıtları (transaction log) tutarak bu özelliği sağlar. Sistem yeniden başlatıldığında, commit edilmiş tüm işlemlerin uygulandığı bir durum restore edilir.

Transaction Kontrol Komutları (TCL)

SQL’de transactionları yönetmek için kullanılan temel komutlar şunlardır:

  • BEGIN TRANSACTION veya START TRANSACTION: Yeni bir transaction başlatır.
  • COMMIT: Transaction içindeki tüm değişiklikleri kalıcı hale getirir ve transaction’ı sonlandırır.
  • ROLLBACK: Transaction içindeki tüm değişiklikleri geri alır ve veritabanını transaction’ın başladığı duruma döndürür.
  • SAVEPOINT (isteğe bağlı): Bir transaction içinde belirli bir noktayı işaretlemek için kullanılır. Daha sonra bu noktaya geri dönülebilir.

Neden Transaction Kullanmalıyız?

Transactionlar, veritabanı uygulamaları için vazgeçilmezdir çünkü:

  • Veri Bütünlüğü: ACID özellikleri sayesinde verilerin her zaman doğru ve tutarlı kalmasını sağlarlar.
  • Hata Yönetimi: İşlemler sırasında oluşan hatalarda kolayca önceki duruma dönülmesini (rollback) mümkün kılarak veri bozulmasını önlerler.
  • Eş Zamanlılık Kontrolü: Birden fazla kullanıcının aynı verilere aynı anda erişmesi durumunda tutarsızlıkları önler.
  • İş Süreçleri Güvenliği: Kritik iş süreçlerinin (para transferi, envanter güncelleme, sipariş işleme vb.) güvenilir bir şekilde yürütülmesini garanti ederler.

SQL’de transactionlar ve ACID özellikleri, veritabanı yönetim sistemlerinin güvenilirliğini ve veri bütünlüğünü sağlayan temel yapı taşlarıdır. Atomicity, Consistency, Isolation ve Durability prensipleri sayesinde, karmaşık operasyonlar bile güvenle yürütülür ve sistem hatalarına karşı koruma sağlanır. Bu mekanizmalar, modern veritabanı uygulamalarında verinin doğru, tutarlı ve erişilebilir kalmasının vazgeçilmez bir garantisidir, böylece iş süreçlerinin kesintisiz ve hatasız ilerlemesi mümkün olur.