22 Eylül 2014 Pazartesi

Transactions

-- Banka işlemi senaryosu

-- Furkan : 1000 tl
-- Barış : 1000 tl

-- Senaryoda Barış 100tl'sini Furkan'a gönderiyor.

-- İşlemler


-- Barış'ın hesabından -100tl düşülür.
-- UPDATE Hesaplar SET Bakiye -= 100 where KullaniciAdi = Baris

-- Elektrik kesildi - hard disk yandı - sistemsel arıza oldu.

-- Furkan'ın hesabına +100tl eklenir.
 --UPDATE Hesaplar SET Bakiye += 100 where KullaniciAdi = Furkan

-- Bankamızı oluşturalım.
Create Database BatanBank

-- Veritabanını kullanalım
USE BatanBank

-- Tablomuzu oluşturalım
CREATE TABLE Musteriler
(
MusteriID int primary key identity(1,1) not null,
MusteriAdi nvarchar(150) not null,
Bakiyesi money not null
)

-- Müşterileri ekleyelim.
INSERT INTO Musteriler(MusteriAdi, Bakiyesi) values ('Barış', 1000)
INSERT INTO Musteriler(MusteriAdi, Bakiyesi) values ('Furkan', 1000)

-- Kontrol
SELECT * FROM Musteriler

-- Transcaction işlemi (MUTLAKA TRY-CATCH bloğu ile kullanılır)
BEGIN TRY
BEGIN TRANSACTION-- hareket bilgisi başlatılır.
UPDATE Musteriler SET Bakiyesi -=1000 where MusteriID = 1
SELECT 10/0 -- işlem hatası (donanımsal, elektrik kesintisi ...)
UPDATE Musteriler SET Bakiyesi +=1000 where MusteriID = 2
COMMIT TRANSACTION -- hareket bilgisi hatasız bir şekilde onaylanır.
END TRY
BEGIN CATCH
print 'Transcation işlemi hatalı!'
ROLLBACK TRANSACTION -- hareket bilgisi hataya düşmüsse, bu işlem en başa sarılır.
END CATCH

Hiç yorum yok: