ASP.NET
Network Akademi

Met Hostimg

“Bilgi paylaşıldıkça artar” sloganı ile .NET Platformuna ilişkin birikimlerin paylaşıldığı ASP.NET.TR Topluluğunda sizde “YAZAR” olmak için ; info@asp.net.tr e-mail adresine kendinizi anlatan bir e-mail göndererek başvuruda bulunabilirsiniz.

SQL TRANSACTION

Onur YILMAZ
SQL
17.08.2011 10:30:40
Hit : 3894

Merhabalar bu makalede SQL tarafında TRANSACTION işlemi nasıl gerçekleştirilir bundan bahsetmek istedim.Öncelikle Transaction nedir? Ne işe yarar? Neden kullanılmalıdır? Gibi soruları cevaplayalım isterim.
 
TRANSACTION Nedir?
Transaction’ın türkçe karşılığı işlem demektir.Veri tabanımıza yaptığımız her insert,update,delete gibi işler aslında transaction’dur.
 
TRANSACTION Ne İşe Yarar?
Transaction adı üstünde işlemdir.Peki biz zaten normalde insert,delete vb. işleri yaparken transaction yapmış oluyorsak neden Transaction bloğunu kullanalım.
 
Transaction’ı ard arda yapacağımız işlemlerde kullanırız.Yani birbiri ile ilişkili işlemlerde kullanırız.
 
Nasıl mı?
Mesela veri tabanımızda Urun,UrunFiyat ve IslemLog adında üç tane tablomuz olsun.
 
Urun tablomuza bir ürün eklediğimizde otomatik olarak UrunFiyat tablomuza eklediğimiz ürünün Id’si ile bir insert yapıyor olalım.
 
Bu iki işlem yapıldığında da IslemLog tablomuza gerekli loglamamızı yapıyor olalım.
 
Yani işlem sıramız şu şekilde olsun;
1- Urun tablosuna ürün eklenecek
2- IslemLog tablosuna,Urun tablosuna eklenen ürün ile ilgili log atılacak.
3- Urun tablosuna eklenen ürünün Idsi ile UrunFiyat tablosuna fiyat bilgisi eklenecek.
4- IslemLog tablosuna,UrunFiyat tablosuna eklenen fiyat ile ilgili log atılacak.
 
Diyelim ki Transaction yapısını kullanmadan yukarıdaki işlemleri gerçekliyoruz;
1- X adında bir ürünü Urun tablosuna ekledik.
2- IslemLog tablosuna log atılırken hata oldu ve işlem kesildi.
Bu durumda yazmış olduğumuz seneryo yarıda kalmış oldu.Urun tablosunda X adında ürünümüz oluştu fakat UrunFiyat tablosunda o ürüne ait fiyat oluşamadı.
 
Ama Transaction yapısını kullanmış olsaydık hata almış olsak bile yapılan tüm işlemler geri alınacağı için Urun tablosundan X adındaki üründe kaldırılacaktı böylece işlem bölük pörçük olmayacaktı.
 
Transaction Yapısının Anahtar Kelimeleri Nelerdir?
Begin Transaction       : Transaction’nu başlatır.
Commit Transaction      : işlemler yapılırken bir hata ile karşılaşılmamış ise transaction’nu tamamlar.
Rollback Transaction    : İşlemler yapılırken bir hata ile karşılaşılırsa yapılmış olan bütün işlemleri geri alır.
 
Gelin bu kadar anlatıma birde örnek ekliyelim anlaşılmasını ve kullanımını dahada pekiştirelim.
 
 
--Ürün bilgilerini tutmak için Urun tablomuzu oluşturuyoruz.
CREATE      TABLE Urun
(
      UrunId      INT   IDENTITY(1,1)     NOT NULL,
      UrunAdi     NVARCHAR(50)            NULL,
      UrunKodu    NVARCHAR(50)            NULL,
      AktifMi     BIT                     NULL
)
 
--Ürün fiyat bilgilerini tutmak için UrunFiyat tablomuzu oluşturuyoruz.
CREATE      TABLE UrunFiyat
(
      UrunFiyatId INT   IDENTITY(1,1)     NOT NULL,
      UrunId      INT                     NULL,
      Fiyat       DECIMAL(16,2)           NULL,
      AktifMi     BIT                     NULL
)
 
--Yapılan işlemlerin geçmişini(Loglarını) tutmak için IslemLog tablomuzu oluşturuyoruz.
CREATE      TABLE IslemLog
(
      IslemLogId        INT   IDENTITY(1,1)     NOT NULL,
      TabloAdi          NVARCHAR(50)            NULL,
      IslemAciklama     NVARCHAR(500)           NULL,
      AktifMi           BIT                     NULL
)
 
--Ürün tablosuna ürün eklediğimizde son eklenen ürünün
--Id'sini(İndexini) tutacağımız değişkeni tanımlıyoruz.
DECLARE     @pSonUrunIndex    INT
 
--Try,Catch yapısını kullnanıyoruz çünkü TRY blogunda yapmak istediğimiz
--işlemleri gerçekleyeceğiz eğer bu işlemler sırasında bir hata almassak
--işlemlerimizi başarılı bir şekilde tamamlayacağız(Commit edeceğiz).
--Eğer bir hata ile karşılaşırsak CATCH bloğuna düşeceğiz ve yapılan
--işlemlerin hepsini geri alacağız(RollBack edeceğiz).
BEGIN TRY
      --Transactionu başlatıyoruz.
      BEGIN TRANSACTION
 
            --Ürün tablosuna bir ürün ekliyoruz
            INSERT      Urun
            VALUES      ('Gofret','GFRT',1)
            --Eklenen ürünün Id'sini tanımlamış olduğumuz değişkene atıyoruz.
            SET   @pSonUrunIndex    =     (SELECT     @@IDENTITY)
 
 
            --Yaptığımız işlemi logluyoruz.
            INSERT      IslemLog
            VALUES      ('Urun','Sisteme Ürün eklendi',1)
 
 
            --Eklediğimiz ürünün fiyatını belirlemek için
            --UrunFiyat tablosuna UrunId ile insert ediyoruz
            INSERT      UrunFiyat
            VALUES      (@pSonUrunIndex,1.25,1)
 
 
            --Yaptığımız işlemi logluyoruz.
            INSERT      IslemLog
            VALUES      ('UrunFiyat','Gofret ürününe fiyat bilgisi eklendi',1)
 
      --Yapılan işlemlerde sorun olmadan tamamlanırsa
      --Transactionu başarılı sonlandırıyoruz
      COMMIT TRANSACTION
END TRY
BEGIN CATCH
      --Yapılan işlemleri geri çekiyoruz
      ROLLBACK TRANSACTION
END CATCH
 
--Urun,UrunFiyat ve IslemLog tablolarımıza kayıtlar başarı ile
--yazılmışmı diye kotrol ediyoruz
SELECT      *     FROM Urun
SELECT      *     FROM UrunFiyat
SELECT      *     FROM IslemLog
 
--Tablolarımızı veri tabanımızdan kaldırıyoruz.
--Bu işlemi tabiki test oldupu için gerçekledik.
--Gerçek ortamda tablolarımız yerinde kalacak.
DROP TABLE Urun
DROP TABLE UrunFiyat
DROP TABLE IslemLog
 
 
Umarım yararlı olmuştur.
 
Bir sonraki makalede görüşmek üzere,
İyi günler dilerim.



BU İÇERİĞE YORUMDA BULUNUN


Bu MAKALE'ye yorum yapabilmek için Üye olmalısınız ...!


BU İÇERİĞE YAPILAN YORUMLAR