الـTransactions في SQL Server

الـTransaction هي وحدة عمل منطقية تشمل مجموعة من العمليات على قاعدة البيانات (قراءة، إدخال، تحديث، أو حذف) وتُنفذ كوحدة واحدة لضمان سلامة البيانات باستخدام مبدأ ACID.


خصائص Transactions (ACID):

  1. Atomicity (الذرية):
    • العمليات تُنفذ بالكامل أو يتم إلغاؤها بالكامل.
  2. Consistency (التناسق):
    • تضمن أن قاعدة البيانات تبقى في حالة متناسقة بعد انتهاء الـ Transaction.
  3. Isolation (العزل):
    • العمليات داخل الـ Transaction لا تتأثر بعمليات أخرى تعمل بالتوازي.
  4. Durability (الدوام):
    • التغييرات تُحفظ بشكل دائم بعد إتمام الـ Transaction.

We are talked before about [[What is Database#database-is-acid|ACID]]

أوامر إدارة Transactions:

  1. الـBEGIN TRANSACTION: بدء Transaction جديد.
  2. الـCOMMIT: تأكيد التغييرات وحفظها بشكل دائم.
  3. الـROLLBACK: التراجع عن جميع التغييرات وإعادة الحالة الأصلية.

الفرق بين Commit و Rollback:

الميزةCommitRollback
التأثيريحفظ التغييرات بشكل دائم.يلغي جميع التغييرات.
الرجوع للخلفلا يمكن التراجع بعد COMMIT.يُعيد قاعدة البيانات للحالة السابقة.
الاستخداملتأكيد العمليات.للتراجع عند حدوث خطأ.

مثال عملي:

تحويل أموال بين حسابين:

BEGIN TRANSACTION;
 
-- خصم من الحساب A
UPDATE Accounts SET Balance = Balance - 100 WHERE AccountID = 1;
 
-- إضافة للحساب B
UPDATE Accounts SET Balance = Balance + 100 WHERE AccountID = 2;
 
-- تأكيد التغييرات
COMMIT;

التراجع في حالة خطأ:

BEGIN TRANSACTION;
 
UPDATE Accounts SET Balance = Balance - 100 WHERE AccountID = 1;
 
-- خطأ أثناء العملية
IF @@ERROR <> 0
    ROLLBACK;
ELSE
    COMMIT;

التحكم في مستويات العزل (Isolation Levels):

المستوىالوصف
READ UNCOMMITTEDيسمح بقراءة البيانات غير المحفوظة (Dirty).
READ COMMITTEDلا يسمح بقراءة البيانات غير المحفوظة.
REPEATABLE READيمنع تعديل البيانات أثناء القراءة.
SERIALIZABLEأعلى مستوى عزل، يمنع القراءة والكتابة.

تغيير مستوى العزل:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRANSACTION;
-- العمليات هنا
COMMIT;

ملاحظات:

  1. استخدم SAVEPOINT لتحديد نقاط يمكنك التراجع إليها.
  2. الـROLLBACK مفيد عند حدوث خطأ لضمان سلامة البيانات.
  3. الـTransactions مهمة في العمليات الحساسة مثل تحويل الأموال أو إدارة المخزون.