آموزش پیشرفته SQL Server (جلسه دهم) - Transaction چیست؟

بررسی Transaction، قسمتی از آموزش پیشرفته SQL Server است، پیشنهاد می شود قبل از مطالعه ی Transaction چیست؟، قسمت های قبلی را مرور فرمایید.


Transaction چیست؟

Transaction بمعنی تراکنش بوده و یک واحد منطقی کار است.

Transaction در واقع مجموعه ای از چند دستور است که یا با هم با موفقیت اجرا می شوند و یا هیچکدام از آنها اجرا نخواهند شد.

توجه: تضمین موفقیت اجرای کامل Transaction در SQL با استفاده از Log File خواهد بود.


ACID چیست؟

ACID یکی از ویژگی های است که یک Transaction باید داشته باشد.

ACID سرنام واژگان Atomicity Consistency Isolation Durability بحساب می آید.

  1. Atomicity: بمعنی اتمی بودن است و نشان می دهد که بخشی از Transaction به تنهایی قابل اجرا نمی باشد.
  2. Consistency: بمعنی ثبات و سازگاری است و تضمین می کند که پس از اجرای موفقیت آمیز Transaction و یا شکست آن داده ها در حالت سازگار و معتبر قرار می گیرند.
  3. Isolation: بمعنی ایزولاسیون (جداسازی) است و تضمین می کند که داده های درگیر در Transaction، توسط سایر پروسه ها غیرقابل تغییر هستند.
  4. Durability: بمعنی دوام (بقا) است و تضمین می کند که عوامل ناخواسته مثل رفتن برق و... باعث حذف تأثیر Transaction نهایی شده (Commit) نشوند.

انواع Transaction در SQL Server

در SQL Server سه نوع Transaction وجود دارد:

  1. Auto Commit Transaction
  2. Explicit Transaction
  3. Implicit Transaction

در ادامه به توضیح هر کدام از موارد بالا خواهیم پرداخت.


1- Auto Commit Transaction

Auto Commit Transaction بمعنی اعمال خودکار تراکنش است.

در حالت Auto Commit Transaction تغیرات بلافاصله بعد از اجرای دستورات، اعمال یا Commit می شوند. به همین خاطر است که این حالت را Auto Commit Transaction می نامند. Auto Commit Transaction حالت پیشفرض SQL Server است. 

در SQL Server هر کوئری به تنهایی یک Transaction است. بعنوان مثال کوئری ای را در نظر بگیرد که قرار است 500 هزار رکورد را حذف کند. اگر در میانه ی اجرای کوئری برق برود، SQL Server تضمین می کند که بعد از بالا آمدن دوباره سرور، کل داده ها در حالت معتبر قرار بگیرند. (Consistency)


2- Explicit Transaction

Explicit Transaction بمعنی تراکنش های صریح است.

در حالت Explicit Transaction می توانیم روی شروع و پایان Transaction ها کنترل داشته باشیم. این نوع Transaction در Stored Procedure ها بسیار پرکاربرد است.

مثال: در مثال زیر دو تراکنش از نوع Explicit Transaction داریم. توجه داشته باشید که Transactionها زمانی پایان می یابند که یا Commit و یا Rollback شوند. (Commit بعمنی اعمال تغییرات و RollBack بمعنی برگشت به عقب است)

زمانی که مثال زیر را در محیط SQL Server اجرا نمایید، Transaction اول با موفقیت اجرا  می شود و پیغام "Data Inserted" در ناحیه Message نمایان خواهد شد.

توجه: در مثال زیر فیلد "contract" که با رنگ قرمز متمایز شده است از نوع Not Null است. بنابراین حتماً باید مقدار دهی شود.

اما در Transaction دوم بدلیل اینکه فیلد "contract" مقدار دهی نشده است با خطای زمان اجرا (Runtime Error) مواجه می شویم و Error@@ یک مقدار بزرگتر از صفر را بر می گرداند بنابراین Transaction دوم RollBack شده و پیغام "Error Occurred. Transaction Cancelled" نمایان خواهد شد. توجه داشته باشید زمانی که کوئری مورد نظرمان بدون هیچ خطایی اجرا شود متغییر سراسری Error@@، مقدار صفر را بر می گرداند:

Explicit Transaction

Declare @ErrNo int
Begin Transaction;
Insert into Authors(Au_id, au_lname, au_fname, Phone, contract)
values ('112-33-1811', 'Jane', 'Marey', '409 210-2331', 1);
Set @ErrNo = @@Error;
if @ErrNo != 0
        Begin
               Print 'Error Occurred. Transaction Cancelled';
               RollBack;
        End
else
Begin Print 'Data Inserted.'; Commit; End Begin Transaction; Insert into Authors(Au_id, au_lname, au_fname, Phone)
values('112-33-1234', 'Billy', 'Jones', '409 234-2232'); Set @ErrNo = @@Error; if @ErrNo != 0 Begin Print 'Error Occurred. Transaction Cancelled'; RollBack; End else
Begin Print 'Data Inserted.'; Commit; End

3- Implicit Transaction

Implicit Transaction بمعنی تراکنش های ضمنی است.

در حالت Implicit Transaction می توانیم روی عملیات های RollBack و Commit کنترل داشته باشیم. یک Transaction جدید زمانی می تواند شروع شود که یک Commit یا یک RollBack اتفاق بیافتد.

در حالت Implicit Transaction در پایان هر تراکنش باید به صراحت دستور Commit و یا RollBack ذکر شود.

توجه: با استفاده از دستورات زیر می توانیم این نوع Transaction را هر جا که نیاز شد فعال یا غیرفعال نماییم.

فعال یا غیرفعال کردن Implicit Transaction

Set Implicit_Transactions On;
Set Implicit_Transactions Off;

زمانی که Implicit Transaction غیرفعال شود، SQL Server به حالت Auto Commit Transaction برمی گردد.

مثال:

Implicit Transaction

 Set Implicit_Transactions On;
--Transaction 1
Update Authors Set Au_LName = 'Black' where Au_Id = '172-32-1176';
commit;

--Transaction 2
Update Authors Set Au_LName = 'Voyer' where Au_Id = '213-46-8915';
Rollback;

--Transaction 3
Update Authors Set Au_LName = 'Peterson' where Au_Id = '238-95-7766';
commit;

--Select the Authors, to see the effect of Update statement
Select Au_Id, Au_Fname + ',' + Au_Lname as Name,Phone, City
from Authors 
where Au_id in ('172-32-1176','213-46-8915','238-95-7766'); Set Implicit_Transactions Off;

در مثال بالا، سه دستور Update همراه با Commit یا RollBack وجود دارد. توجه داشته باشید که در اینجا ما آزادیم که به ازای هر دستور، عملیات RollBack و یا Commit را انجام دهیم در صورتی که در حالت Auto Commit Transaction چنین قابلیتی وجود نداشت. اما با اینکه می توانیم پایان Transaction را مشخص کنیم اما روی شروع Transaction کنترلی نداریم.

بعد از اولین Update دستور Commit آمده است یعنی ما می خواهیم تغییرات Commit شوند بنابراین در پایگاه داده، نام خانوادگی نویسنده به مقدار "Black" تغییر پیدا می کند. بلافاصله بعد از آن Transaction جدید آغاز می شود.

در نهایت اولین و آخرین دستور Update اجرا می شوند و تغییرات روی پایگاه داده اعمال می شود و Update دوم انجام نشده و دور انداخته می شود.


در ادامه آموزش Transaction چیست؟ خواهید دید...!

با خرید جلسه 10 از بسته آموزشی "افزایش کارآیی پایگاه داده" موارد زیر را خواهید دید:

  1. توضیحات بسیار جامع تر در مورد انواع Transaction همراه با مثال توسط مدرس
  2. و...

دسترسی به موارد آموزشی بالا در بسته خریداری شده

  • شماره جلسه: 10
  • نام فایل ویدئو: 03
  • فرمت فایل: mp4.

نقطه شروع بحث بالا (Transaction چیست؟) در ویدئو: 14:18


برای خرید و دانلود کاملآموزش پیشرفته SQL Server کلیک کنید.

READ MORE