Kapat
Anasayfa 29 0

SQL Sorgulama Dili(15) TRANSACTİON Komutu

Merhaba arkadaşlar bugün ki yazımızda birçok Sql ifadesini birlikte kullanmamıza yardımcı olan Transaction bloğunu anlatacağım. Transaction sql işlemleri yapılan yerlerde işi daha pratik ve daha güvenli yapmaya yarayan bir işlemdir.

Transaction Tek sql işlemlerini yaparken bunun yanında sorguda yer alan birçok sql işlemini da yapar.  Ya hep ya hiç mantığıyla çalışır onun için başlangıç ve bitiş değerleri belirlenmelidir. ya bütün işlemleri gerçekleştirir ya da hiçbirini gerçekleştirmez. İşlemlerden biri başarısız olursa, hiçbir işlem gerçekleşmez ve işlemi sonlandırır; ancak tüm işlemler başarılı olduğunda içinde gerçekleşen tüm veri değişikliklerini onaylar ve kaydeder.

     Transaction “Begin Transaction” ifadesiyle başlar Commit veya Rolback komutları ile son bulur. Transaction komutunda işlemlerin hepsi başarılı ise COMMİT(Onaylama) komutu çalışır ve değişiklikler kalıcı hale gelmiş olur. Ancak işlemde bir hata varsa veya sorun oluştuysa ROLLBACK(Geri dönüş) komutu çalışır. Ve bütün işlemler geri alınır yani işlemden önceki haline geri döner. Bu işlemle veri kaybı önlenmiş olur.

Transaction neden ve nasıl kullanırız?

Öncelikle işlem yaparken veri kaybının ve bozulmanın olmasını istemediğimiz durumlarda kullanırız ya da veri tabanı yedeklerken kullanabiliriz. Çünkü veri tabanı yedeklemesi yapılırken karşıya yüklemenin yanında kullanılan veri tabanından silme işlemi söz konusu olur yani silme ve kaydetme işlemleri aynı anda yapılmaktadır. Nasıl olacağını kısaca açıklamam gerekirse yedekleme yaparken bir hata meydana geldi yetersiz hafıza elektrik kesintisi, bilgisayarın arızalanması, programın sorun çıkartması gibi sorunlar verileri kaybetmemize sebep olabilir işte bu işlemleri yaptığımız komutları Transaction bloğunun içerisine yazarsak bu gibi sorunlarda hata çıkacağı için yapısı gereği işlemleri onaylamaz ve işlemi geri alır şayet sorun ortaya çıkmazsa onaylar ve işlemi sonlandırır.

Şimdi Örnekler üzerinden bakmaya çalışalım;

   Daha önceden tablo oluşturma ve veri girişini anlattığım için burada tekrardan anlatıp yazıyı uzatmak istemiyorum sadece daha önceden oluşturulmuş bir MüşteriHesaplari (SÜTUNLAR= Hesap_Id, Ad, Soyad, Hesap_No, Bakıye) Tablosu ve içerisinde yer alan verilerin olduğunu varsayarak devam edelim.

Yapacağımız işlem bir müşterinin hesabından başka bir müşteriye havale işlemi gerçekleştirmektir. Sizde fark ettiyseniz burada ekleme ve silme işlemi gerçekleşmesi gerekir o zaman sorgumuzu yazalım;

Update MüşteriHesaplari Set Bakıye = Bakıye – 5000 Where Ad=’Çiğdem’ And Soyad=’Çiftçi’

Update MüşteriHesaplari Set Bakıye = Bakıye + 5000 Where Ad=’Zeynep’ And Soyad=’Çiftçi’

Yukarıdaki sorguda “Çiğdem Çiftçi adlı kişinin hesabından Zeynep Çiftçi adlı kişinin hesabına 5000 TL havale yapılsın.” demek istenmiştir. Yani bir hesaptan 5000 TL azalırken diğer hesapta 5000 TL artış olmuştur.  Havale işleminin gerçekleşmesi için bu iki sorgunun aynı anda gerçekleşmesi gerekir. Yukarıda ki örnek Transaction bloğu dışında yapılmış bir örnek bu sorguyu çalıştırırken olası hatalar neler olabilir öncelikle ona bakalım;

1.Hata: Birinci SQL sorgumuzun çalışması fakat ikinci SQL sorgumuzda hata oluşması. Bu durumda Çiğdem Çiftçi’nin hesabından 5000 TL eksilme olacak fakat Zeynep Çiftçi’nin hesabında herhangi bir değişiklik olmayacaktır.

2.Hata: Birinci SQL sorgumuzda hata oluştu ve ikinci SQL sorgumuzun çalışması durumunda Çiğdem Çiftçi’nin hesabından herhangi bir eksilme olmayacak fakat Zeynep Çiftçi’nin hesabına 5000 TL eklenecek.

İşte bu tür hataları önlemek ve olası sorunları ortadan kaldırmak için   “TRANSACTİON” yapısını kullanmalıyız. “TRANSACTİON” sayesinde her iki sorguda birden çalıştırılacak, iki sorguda başarılı ise “TRANSACTİON” onaylanacak fakat herhangi bir hata durumunda her iki sorguda iptal edilecek.

     Transaction “Begin Transaction” ifadesiyle başlar Commit veya Rollback komutları ile son bulur. Transaction komutunda işlemlerin hepsi başarılı ise COMMİT(Onaylama) komutu çalışır ve değişiklikler kalıcı hale gelmiş olur. Ancak işlemde bir hata varsa veya sorun oluştuysa ROLLBACK(Geri dönüş) komutu çalışır. Ve bütün işlemler geri alınır yani işlemden önceki haline geri döner.

ÖRNEK:
Begın Transactıon
Begın Try

Update MüşteriHesaplari Set Bakıye = Bakıye – 5000 Where Ad=’Çiğdem’ And Soyad=’Çiftçi’

Update MüşteriHesaplari Set Bakıye = Bakıye + 5000 Where Ad=’Zeynep’ And Soyad=’Çiftçi’

Select * from MüsteriHesaplari

Commıt
End Try
Begın Catch
Rollback
End Catch

“BEGIN TRANSACTION” ile “Transaction” işlemini başlatıyoruz. Tek bir komut gibi çalışmasını istediğimiz SQL kodlarımızı yazdıktan sonra “Transaction” işlemini “COMMIT” ile sonlandırıyoruz. “COMMIT” komutuna gelene kadar işlemde hata olsa da olmasa da, işlem sonuçları tablomuza yansımayacaktır. “END TRY” ile bloğumuzu kapatıyoruz. İşlemde bir hata ile karşılaşılması durumunda “BEGIN CATCH” blogu devreye girecek ve “ROLLBACK” komutu ile yapılan işlemler geri alınacak. İşlemi kontrol edebilmek için tümünü listele komutunu yazmakta fayda var.

Evet arkadaşlar Transaction komutunun temel yapısı bu şekilde. Doğru yerlerde ve doğru zamanda kullanıldığı zaman tüm programcıların işine yarayacak bir kod bloğu. Umarım açıklayıcı bir yazı olmuştur bir sonraki yazıda görüşmek üzere

Bu konuyla ilgili diğer yazılara bakmak isterseniz;

https://www.gencprogramci.org/author/ci-d-em/

ÇİĞDEM ÇİFTÇİ 😀 

[Toplam: 0   Ortalama: 0/5]
Avatar

Çiğdem Çiftçi {Çiğdem Çiftçi}

🐛 🦋 🎈 🌍