ال SQL Transaction هو مجموعة من الايعازات او Queryالمطلوب تنفيذها مرة واحدة داخل قاعدة البيانات .او التراجع عن تنفيذها اذا حدث خطأ بوحدة منها.
مرات نحتاج انه انفذ اكثر من ايعاز على اكثر من جدول بوقت واحد و بشكل متتابع مثلا سحب رصيد من بطاقة كردت كارد انت لازم اتعدل حساب البطاقة انتقصه بالمبلغ المسحوب واتزيد مجموع المبالغ المسحوبة من ATM وايضا اتسجل العملية ووقت التنفيذ
ناخذ مثال حتى يتوضح الموضوع وهذا مثال عملي من داخل قاعدة بيانات لاحد انظمتنا هنا نحن نضيف جهة لكن نحتاج انضيف الجهة وايضا انسجل من قام بالاضافة لجدول الاحداث بالنظام لاغراض الرقابة
begin tran
begin try
insert into Direction_tbl
(DirName,DirTypeid,Relationid,Unitid,Winerid,UserId)
values
(@DirName,@DirTypeId,@Relationid,@Unitid,@Winerid,@UserId)
declare @dir_id int=ident_current(‘Direction_tbl’)
declare @str nvarchar(500)=N’اضافة المستخدم ‘+(select nickname from user_tbl where user_id=@UserId)+’ الجهة’+’ ‘+ @DirName
insert INTO log_users
(log_desc,dt_time,userid)
values
(@str,getdate(),@UserId)
commit tran
end try
BEGIN CATCH
rollback tran
END CATCH;
ما هو commit؟هو تثبيت الايعازات وارسال البيانات الى القاعدة بشكل نهائي وانهاء Transaction
ما هو Rollback؟تعني انك تريد التراجع فيما قمت بتنفيذه.والعودة الى الوضع عند begin tran
خصائص ال Transaction
لل Transaction اربعة سمات اساسية تختصر في الكلمة التالية ACID
Atomic
تعني ان كل ما داخل ال Transaction يتم عمل Commit له تنفيذه غلى القاعدة او Rollback بالكامل
Consistent
تعني انه يحافظ على اتساق المعلومات داخل قاعدة البيانات فمثلا في المثال السابق ال Transaction يضمن تسجيل المستخدم الذي قام باضافة الجهة الجديدة
Durable
تعني انه بمجرد ان يتم اكتمال ال Transaction كل التعديلات التي حدثت داخله تكون دائمة ومكتوبة داخل قاعدة البيانات sql.
Isolation
العزل و تعني ان كل ما يحدث داخل ال Transaction يكون في درجة من العزل عن ال Transactions الاخر
نصائح عملية عند استخدام Transaction او Transaction best practices
- قلل الى اكبر حد الايعازات داخل Transaction
- استرجع البيانات خارج Transaction اذا كان ذلك بالامكان بواسطة ال select
هل يوجد بالسي شارب عملية مشابهة؟ نعم تستطيع تطلع على الرابط
https://www.c-sharpcorner.com/UploadFile/87b416/sql-transaction/