Modelleme ve veri değişimi
Transaction, ACID ve TRY/CATCH
Bir iş adımı ya tamamlanır ya geri alınır.
Kavramı anlayalım
Transaction birden fazla değişikliği iş birimi olarak ele alır. Atomicity parçalı kalmamayı, consistency kısıtların korunmasını, isolation eşzamanlılık davranışını, durability kalıcı tamamlanmayı ifade eder. BEGIN TRANSACTION başlatır, COMMIT kalıcılaştırır, ROLLBACK geri alır. Uzun açık transaction kilitleri ve log kullanımını büyütebilir.
TRY/CATCH hata yakalar; SET XACT_ABORT ON birçok çalışma zamanı hatasında transaction’ın sonlandırılma davranışını iyileştirir. CATCH içinde XACT_STATE() ile aktif transaction durumunu kontrol edip gerekirse rollback yap ve THROW ile hatayı saklamadan geri ilet. Başarı mesajı verirken gerçekte başarısız yazmayı gizleme.
Sipariş–kalem ekleme, stok azaltma ve ilişkili finansal değişiklikler için.
Hata yakalayıp transaction’ı açık bırakmak veya başarısız işlemi başarılı göstermek.
Aynı konu. Üç farklı derinlik.
BEGIN TRANSACTION; SELECT @@TRANCOUNT AS OpenTransactions; ROLLBACK;Açık transaction sayısını görüp geri alır.
Bu sayfa SQL çalıştırmaz. Örnekleri indirilebilir SqlStudioLab veritabanında, SSMS’de uygula. Geçici tablo örneklerini yeniden çalıştırırken yalnız ilgili #tabloyu temizle. VIEW, procedure ve function örnekleri lab’da kalıcı nesne oluşturur; üretim bağlantısı kullanma.
Önce kendin dene.
Geri alma sonrası Laptop stoğunun başlangıç değerinde kaldığını kontrol et.
Çözümü ve açıklamasını göster
SELECT Stock FROM lab.Product WHERE ProductId = 1;Başlangıç değeri 8. Başka kalıcı değişiklik yaptıysan örnek sonucu değişir.