مدیریت تراکنش در پایگاه داده SQL

تیم تحریریه 1404/02/06 0 18
لینک کوتاه https://zoheirsoftware.com/z/d77d88cca |
مدیریت تراکنش در پایگاه داده SQL, دستور BEGIN TRAN,دستور COMMIT TRAN

مدیریت تراکنش در پایگاه داده SQL Server

یکی از مهم‌ترین بخش‌های سیستم‌های پایگاه داده، مدیریت تراکنش‌ها (Transaction Management) است.

تراکنش‌ها به کاربران اجازه می‌دهند تا مجموعه‌ای از دستورات SQL را به صورت یک واحد واحد منطقی از کار اجرا کنند که یا کاملاً انجام شوند یا در صورت بروز خطا به حالت اولیه بازگردند.

این موضوع تضمین‌کننده یکپارچگی داده‌ها و پایداری سیستم است.

در SQL Server، چهار دستور اصلی برای مدیریت تراکنش‌ها استفاده می‌شود:

  • BEGIN TRAN

  • COMMIT TRAN

  • ROLLBACK TRAN

  • SAVE TRAN

تراکنش به مجموعه‌ای از عملیات گفته می‌شود که به عنوان یک واحد منطقی اجرا می‌شوند.

اگر یک عملیات از این مجموعه با شکست مواجه شود، تمام عملیات باید به حالت قبل بازگردند.

این رویکرد باعث می‌شود پایگاه داده در وضعیت ناپایدار باقی نماند.

 

 

مدیریت تراکنش در پایگاه داده SQL Server

 

ویژگی اصلی تراکنش‌ها 

چهار ویژگی اصلی تراکنش‌ها را می‌توان با اصول ACID توضیح داد:

  • Atomicity (اتمی بودن)

    همه یا هیچ.
  • Consistency (سازگاری)

    داده‌ها از یک حالت معتبر به حالت معتبر دیگر منتقل می‌شوند.
  • Isolation (جداسازی)

    تراکنش‌ها مستقل از هم اجرا می‌شوند.
  • Durability (پایداری)

    پس از تأیید، نتایج تراکنش حفظ می‌شوند حتی در صورت خرابی سیستم.

 

 

ویژگی اصلی تراکنش‌ها 

 دستور BEGIN TRAN

دستور BEGIN TRANSACTION شروع یک تراکنش را مشخص می‌کند.

پس از اجرای این دستور، سیستم تغییراتی را که در داده‌ها انجام می‌شود، نگه می‌دارد اما آن‌ها را ذخیره دائمی نمی‌کند، مگر اینکه با COMMIT تایید شوند.

مثال:

BEGIN TRANSACTION;

UPDATE Accounts
SET Balance = Balance - 1000
WHERE AccountID = 1;

UPDATE Accounts
SET Balance = Balance + 1000
WHERE AccountID = 2;



در این مثال دو تغییر انجام می‌شود: کم شدن مبلغ از حساب اول و اضافه شدن به حساب دوم.

اگر یکی از این دستورات با شکست مواجه شود، باید کل تراکنش لغو شود.

 

دستور COMMIT TRAN

دستور COMMIT TRANSACTION باعث می‌شود تمامی تغییراتی که از شروع تراکنش انجام شده‌اند، به صورت دائمی در پایگاه داده ذخیره شوند.

پس از اجرای این دستور، دیگر نمی‌توان آن تغییرات را بازگرداند.

مثال:

BEGIN TRANSACTION;

UPDATE Accounts
SET Balance = Balance - 1000
WHERE AccountID = 1;

UPDATE Accounts
SET Balance = Balance + 1000
WHERE AccountID = 2;

COMMIT TRANSACTION;



در اینجا تراکنش به درستی به پایان می‌رسد و تغییرات ذخیره می‌شوند.

 

 

 

🌟 آیا می‌خواهید به یک متخصص پایگاه داده تبدیل شوید و در دنیای فناوری اطلاعات بدرخشید؟

با دوره آموزشی SQL Server ما، شما می‌توانید به راحتی و با روشی عملی، تمام مهارت‌های لازم را یاد بگیرید!

این دوره به شما آموزش می‌دهد که چگونه داده‌ها را به بهترین شکل مدیریت کنید، گزارش‌های قدرتمند بسازید و به تحلیل‌های عمیق دست یابید.

با محتوای جذاب و پروژه‌های واقعی، شما نه تنها تئوری را یاد می‌گیرید، بلکه توانایی‌های عملی خود را نیز تقویت می‌کنید.

پس فرصت را از دست ندهید! همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آینده شغلی روشن‌تر بردارید!

 همین حالا شروع کنید و به دنیای داده‌ها بپیوندید!

 

 

دستور ROLLBACK TRAN

اگر در حین اجرای یک تراکنش خطایی رخ دهد یا شرایط خاصی برقرار نباشد، می‌توان با استفاده از ROLLBACK تمام تغییرات انجام شده را بازگرداند و پایگاه داده را به حالت قبل از BEGIN TRAN برگرداند.

مثال:

BEGIN TRANSACTION;

UPDATE Accounts
SET Balance = Balance - 1000
WHERE AccountID = 1;

-- خطای فرضی
IF (SELECT Balance FROM Accounts WHERE AccountID = 1) < 0
BEGIN
    ROLLBACK TRANSACTION;
    PRINT 'موجودی کافی نیست، تراکنش بازگردانده شد.';
    RETURN;
END

UPDATE Accounts
SET Balance = Balance + 1000
WHERE AccountID = 2;

COMMIT TRANSACTION;


دستور SAVE TRAN

SAVE TRANSACTION برای ایجاد یک نقطه بازیابی (Savepoint) در داخل یک تراکنش استفاده می‌شود.

در صورتی که بخشی از تراکنش با خطا مواجه شود، می‌توان با ROLLBACK به آن نقطه خاص بازگشت، بدون اینکه کل تراکنش لغو شود.

مثال:

BEGIN TRANSACTION;

UPDATE Orders
SET Status = 'Processing'
WHERE OrderID = 1001;

SAVE TRANSACTION SavePoint1;

UPDATE Inventory
SET Quantity = Quantity - 10
WHERE ProductID = 500;

-- فرض کنید این دستور خطا می‌دهد
IF (SELECT Quantity FROM Inventory WHERE ProductID = 500) < 0
BEGIN
    ROLLBACK TRANSACTION SavePoint1;
    PRINT 'موجودی کافی نیست، به نقطه بازیابی بازگشت شد.';
END
COMMIT TRANSACTION;

در این مثال، فقط تغییرات بعد از SavePoint بازگردانده می‌شوند، اما تغییرات قبل از آن حفظ می‌شوند.

نکات پیشرفته در مدیریت تراکنش

  •  تراکنش‌های تودرتو (Nested Transactions)

    SQL Server از مفهوم تراکنش‌های تودرتو پشتیبانی می‌کند، اما فقط اولین COMMIT یا ROLLBACK مؤثر خواهد بود.
    باقی موارد صرفاً شمارنده تراکنش را تغییر می‌دهند.
  • متغیر TRANCOUNT

    این متغیر نشان می‌دهد که چه تعداد تراکنش فعال وجود دارد.
    برای بررسی وضعیت فعلی تراکنش بسیار کاربردی است.
SELECT @@TRANCOUNT;

 

  • خطاها و TRY...CATCH

    برای مدیریت خطاها در تراکنش‌ها، استفاده از ساختار TRY...CATCH توصیه می‌شود.
BEGIN TRY
    BEGIN TRANSACTION;

    -- عملیات
    -- ...

    COMMIT TRANSACTION;
END TRY
BEGIN CATCH
    ROLLBACK TRANSACTION;
    PRINT ERROR_MESSAGE();
END CATCH;

 

نکات پیشرفته در مدیریت تراکنش

مثال کاربردی از مدیریت تراکنش ها

BEGIN TRY
    BEGIN TRANSACTION;

    INSERT INTO Customers (Name, Email) VALUES ('Ali', 'ali@example.com');
    SAVE TRAN SavePoint1;

    INSERT INTO Orders (CustomerID, OrderDate) VALUES (999, GETDATE()); -- خطا، ID وجود ندارد

    COMMIT TRANSACTION;
END TRY
BEGIN CATCH
    ROLLBACK TRANSACTION SavePoint1;
    PRINT 'بخشی از تراکنش بازگردانده شد. خطا: ' + ERROR_MESSAGE();
END CATCH;


جمع‌بندی

مدیریت صحیح تراکنش‌ها یکی از کلیدی‌ترین مهارت‌ها در توسعه و مدیریت پایگاه داده‌هاست.

استفاده هوشمندانه از BEGIN TRAN, COMMIT, ROLLBACK و SAVE TRAN به شما این امکان را می‌دهد که:

  • داده‌ها را در برابر خطاها محافظت کنید.
  • از ورود داده‌های ناقص جلوگیری کنید.
  • عملیات پیچیده را کنترل و مدیریت کنید.

یادگیری کامل این دستورات و استفاده از آن‌ها در سناریوهای واقعی، تأثیر زیادی در امنیت و یکپارچگی سیستم‌های اطلاعاتی خواهد داشت.

دوره های مرتبط
آموزش Sql,آموزش sqlserver, آموزش جامع Sqlserver

آموزش پایگاه داده SqlServer

پایگاه داده Sqlserver یکی از پایگاه داده های مهم برای ذخیره اطلاعات محسوب میشود .

997,000 تومان

2.7k بازدید

ارسال دیدگاه

برای ارسال نظر لطفا ورود یا ثبت نام کنید.