Transaction İşlemi
Transaction konusunda en yaygın örnek bankaların havale işlemidir.Parayı gönderen kişinin hesabından tutarı düşen 1. sorgu ve daha sonra paranın yatacağı hesaba tutarı ekleyen 2. sorgu çalışır en basit haliyle düşünürsek.Bu işlemlerin hareketlere kaydedilmesi vs. saymazsak bile.
Her iki sorgunun da güvenle gerçekleştiğinden emin olabilmek için “Transaction” yapısını kullanırız.Transaction, prensip olarak ya bütün işlemleri gerçekleştirir ya da hiçbirini gerçekleştirmez..Şimdi bi senaryo üzerinden bunu görelim..
Örnek
Örneğimizde 1 Tablomuz var ve tablo yapımız hesap — tutar şeklinde
Hesap numaraları ve bunların içerisindeki tutarı tutan sütnumuzu var yapıcağımız işlemde Bir hesaptan diğerine para göndericez..
PHP tarafında mysql bağlantılarınızı vs. yaptığınızı varsayıyorum..
Normal Şartlarda sorgularımız aşağıdaki gibidir..
$tutar = 500;
$a = $db->query("UPDATE test SET tutar = (tutar-$tutar) WHERE hesap = 123 ")or die($db->error);
$b = $db->query("UPDATE test SET tutar = (tutar+$tutar) WHERE hesap = 321 ")or die($db->error);
Yukarıdaki sorgularımızda herhangi bir hata yok.. İlk sorguda hesaptan tutarı düşerken 2. sorgudada havale yapılan hesaba ekleyen sorgu çalışıcak.. Ancak Sorgulardan 1. çalışıp 2. sinin çalışmadığı durumlarda birinci kişinin hesabından para silindikten sonra ikinci kişinin hesabına para yatmamışsa, pek de hoş durumlarla karşılaşmazsınız.
İşte burda imdadımıza Transaction yapıları yetişmekte. Şimdi aşağıda Transaction kullanarak aynı işlemi gerçekleştirelim..
// Transaction a başlıyoruz $db->query("SET AUTOCOMMIT=0"); $db->query("START TRANSACTION"); // sorgularımızı hazırlıyoruz $a = $db->query("UPDATE test SET tutar = (tutar-$tutar) WHERE hesap = 123 ")or die($db->error); $b = $db->query("UPDATE test SET tutar = (tutar+$tutar) WHERE hesp = 321 ")or die($db->error); if ($a AND $b) { $db->query("COMMIT"); echo "BAŞARILI"; } else { $db->query("
ROLLBACK"); echo "Bir Sorun Oluştu"; }
PHP içerisinde kullanımı da bu şekilde gerçekleşiyor. Kullandğımız yapıların açıklamalarıda aşağıda yer almakta..
- START TRANSACTION: İşlemi başlatan cümledir.
- ROLLBACK: Sorgulardan biri gerçekleşmezse işlemi sağlıklı biçimde geri alır, her tablo işlemden önceki haline geri döner.
- COMMIT: İşlemi gerçekleştirir.
İyi çalışmalar