Concurrent Transactions Kavramı
2 Kasım 2016 Çarşamba
Transaction, bir yada birden fazla sorgunun bir araya gelerek tek bir amaca yönelik hizmet ettiği sorgu yada sorgular bütününe denir. Transactionlar size birden fazla işlemi tek bir birim halinde yönetmenize olanak sağlarlar. Şayet transaction kod gövdesinde herhangi bir aksaklık olursa bu durumda tüm güncelleme işlemleri ilk anki haline geri dönecektir.
Bir transaction işlemi size ACID(atomicity, consistency, isolation, durability) doktrini olarak adlandırılan veri bütünlüğünün korunması işlemini garanti eder. Birçok ilişkisel veritabanı sistemleri, -Sql Server gibi- tablo kilitleme, loglama ve transaction yönetimi olarak adlandırabileceğimiz güncelleme, kayıt ekleme ve silme işlemlerini sağlıklı şekilde yürütür.
Şimdi örnek bir uygulama ile yolumuza devam edelim:
Aşağıdaki örnek resimde gördüğünüz gibi tblHesap adında 2 satırlık tablo oluşturuyorum.
Bakınız Resim-1.
Şimdi örnek senaryomuza göre 1 numaralı id'ye sahip Ahmet'in hesabından 100 Lira alıp, 2 numaralı id'ye sahip Ayşe'nin hesabına 100 Lira aktaracağız. Yani bi nevi bankadan bankaya havale örneği gibi düşünebilirsiniz. Transaction kod bloğu aşağıdaki resimde gördüğünüz gibi olacaktır:
Bakınız Resim-2.
Tablomu kontrol ettiğimde bilgilerim beklendiği gibi geliyor.
Bakınız Resim-3.
Peki birde transaction işleminin başarısız olduğu duruma örnek verelim yani olay örgümüzün 1. işlemi başarılı olsun 2. si ise hata versin ve CATCH bloğuma düşsün, o halde 2. sorgumun where koşulunu aşağıdaki örnek resimde gördüğünüz gibi değiştiriyorum.
Bakınız Resim-4.
Bu kez tblHesap tabloma SELECT çektiğimde bilgilerimde herhangi bir değişiklik olmadığını yani kişilerin miktar sütunlarının olduğu gibi korunduğunu görüyorum ki olması gerekende budur. Şayet böyle bir durumda bu sorgular transaction bloklarında olmasa idi 1. sorgum başarılı şekilde çalışacak 2. ise çalışmayacaktı ve işlemlerimdeki bütünlük esası sarsılacaktı.
Yazımı burada noktalıyorum faydalı bir makale olması dileğiyle..