Transaction bir veya daha fazla SQL ifadesini bir bütün olarak düşünen ve başarılı olması halinde SQL ifadelerini kalıcı olarak istenilen değişikliği uygulayan veya hata olması halinde değişiklik yapmadan verileri aynı şekilde korunmasını sağlayan işlemdir.
Örneğin bir öğrenci ev sahibinin hesabına 600 TL kira ödeyecektir. Öğrenci para yatırma işlemini onayladığında önce 600 TL bakiyesinden düşürülür daha sonra ev sahibinin hesabına yatırılır. Eğer bu işlemler gerçekleşirken herhangi bir nedenden dolayı kira yatırılmasaydı ev sahibinin hesabına para yatmaz ve öğrencinin hesabından bakiye düşmez. İşte bu gibi kritik işlemlerde yani bir bütünlük olması gereken işlemlerde Transaction kullanılır.
|
1 2 3 4 5 6 7 8 |
CREATE DATABASE VTYS CREATE TABLE HESAPLAR( HESAP_NO INT PRIMARY KEY, BAKIYE MONEY ) INSERT INTO HESAPLAR(HESAP_NO, BAKIYE) VALUES(3541, 1200) INSERT INTO HESAPLAR(HESAP_NO, BAKIYE) VALUES(3542, 1500) |
Yukarıda ki SQL ifadelerinde VTYS adında bir veritabanı oluşturduk. VTYS adında veritabanının içine HESAPLAR adınad bir tablo ve bu tabloya ait sayısal tipte(INT) birincil anahtar(primary key) özelliği olan HESAP_NO ve para tipinde(MONEY) BAKIYE adında sütunlar oluşturuldu. Bu tablonun alanlarına HESAP_NO alanına 3541 ve 3542, BAKIYE alanına 1200 ve 1500 olan kayıtlar eklendi.
|
1 2 3 4 5 |
UPDATE HESAPLAR SET BAKIYE=BAKIYE-1500 WHERE HESAP_NO=3541 /*HESAP_NO sütununda 3541 nolu kaydın BAKIYE alanından 1500 düşürüldü.*/ UPDATE HESAPLAR SET BAKIYE=BAKIYE+1500 WHERE HESAP_NO=3542 /*HESAP_nO sütununda 3542 nolu kaydın BAKIYE alanını 1500 arttırıldı.*/ |
Yukarıdaki işlemde hesabın 1500 TL arttırılması sırasında bir hata olması durumunda işlem iptal edilse bile gönderen hesaba geri yatırılmayacaktır. Aşağıda ise basit bir transaction işlemi yapalım.
|
1 2 3 4 5 |
BEGIN TRANSACTION UPDATE HESAPLAR SET BAKIYE=BAKIYE-600 WHERE HESAP_NO=3541 UPDATE HESAPLAR SET BAKIYE=BAKIYE+600 WHERE HESAP_NO=3542 SELECT * FROM HESAPLAR ROLLBACK |
Bir Transaction işlemi farklı veritabanlarında(MSSQL, MySQL, Oracle) başlaması farklıdır. Yukarıda ki ve sonra ki örneklerimizde MS SQL’e göre örneklerimizi yapacağız.
Yukarıda ki işlemde Transaction işlemi BEGIN TRANSACTION ile başlatıldığı tanımlanır. Daha sonrasında yazdığoımız 2 update işlemiyle bakiyelerle ilgili değişiklikler uygulanır ve select işlemi ile ekrana değişiklikler yansıtılır.
Ekrana gelen sonuç yukarıda ki gibi olacaktır. HESAP_NO’su 3541 olan kaydın BAKIYE alanı 1200’den 600 TL düşürülmüştür. HESAP_NO’su 3542 olan kaydın BAKIYE alanı 1500’den 600 TL arttırılarak 2100 TL’ye yükseltilmiştir.
Yalnız Transaction en sonunda yazılan ROLLBACK ifadesi bu işlemin kalıcı olarak gerçekleşmesine engeldir. ROLLBACK ifadesi yapılan işlemin kalıcı olarak kaydedilmesini engeller. Bu kod aralığı sadece yazılan Transaction ifadesinin sonucunda ne tür sonuç elde edeceğinizi sağlamış olur. Bu ifadeyi ilerleyen örneklerde bir hata olduğunda geri alınmasını sağlayarak çalıştıracağız. Kayıtların tutulduğu tablomuzu kontrol ettiğimizde HESAP_NO’su 3541 olan kaydın 1200, HESAP_NO’su 3542 olan kaydın 1500 TL BAKIYE bilgisi olduğunu göreceğiz.
|
1 2 3 4 5 |
BEGIN TRANSACTION UPDATE HESAPLAR SET BAKIYE=BAKIYE-600 WHERE HESAP_NO=3541 UPDATE HESAPLAR SET BAKIYE=BAKIYE+600 WHERE HESAP_NO=3542 SELECT * FROM HESAPLAR COMMIT |
Yukarıda ki örnekde yapılan değişikliklerin kaydedilmesi için COMMIT ifadesini kullandık. Bu ifade yapılan işlemlerin kalıcı olarak gerçekleşmesini sağlayacaktır.
Bu yazımızda hata denetimli bir transaction örneği yapmadık. En basit anlamda bir transaction işlemi bu yazımızda olduğu gibidir. Hata denetimli örneklerimizi sonra ki yazılarımızda devam edeceğiz.






