تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
كيفية اعتماد واستخدام الـ TRANSACTIONS داخل SQL Server
#1
كاتب الموضوع : Mr. Ahmed Negm


السلام عليكم ورحمة الله وبركاته

ماذا لو احتجت يوما ما أثناء كتابتك لـ Stored Procedure داخل SQL Server إلى أن تقوم بتنفيذ ثمة عمليات في نفس الوقت ؟؟؟

تعال مع نوضح بمثال جيد من الواقع العملي ... !!

أنت دخلت إلى بنك ، وتريد تحويل مبلغاً من المال ( 100 دولار ) إلى ( أحمد نجم ) ... وهنا سيقوم الموظف المختص بعمليتان :

  1. سحب ( 100 دولار ) من حسابك الشخصي.
  2. إيداع الـ ( 100 دولار ) في حساب ( أحمد نجم ).
ولكن ماذا إذا كانت هذه العملية تتم على ( الكمبيوتر ) ، وبعد سحب المبلغ من الحساب الأول ، صادف البرنامج خطأ ما أثناء التسجيل في الحساب الثاني ؟؟؟

هناك في الحالات البدائية وضع من اثنين:

  1. أن يكون هناك إجراء تحقق من عدم التسجيل ، وبناءا على ذلك يقوم إجراء برمجي آخر بإرجاع المبلغ المسحوب للحساب الأول.
  2. أو يكون البرنامج عقيم التقنية وبالتالي تضيع الـ ( 100 دولار ) على صاحبها ، ولا تصل كذلك للحساب المحول له.
كذلك :: ماذا إن لم تكن عمليتي سحب وإيداع ... فلنفترض إنها مثلا 10 عمليات سحب ، 5 إيداع ، 5 تحويل وتسوية ... الخ ؟؟ ... أظن سيزداد الوضع سوءاً خاصة إذا كنت تبحث عن تزامن التنفيذ وعدم فقدان أي عملية من العمليات المحدد ، فإما يلغي التنفيذ للجميع ، وإما يُنفذوا بالكامل.

في درسنا اليوم سنتعامل مع الـ TRANSACTION ، وهي الخاصة بضبط تلك المسائل ضبطاً تاماً

الشكل العام للجملة:




كود :
[COLOR=#000000][COLOR=#0000bb] BEGIN TRANSACTION

[/COLOR][color=#007700]-- [/color][color=#0000bb]العملية الأولى [/color][color=#007700]-- [/color][COLOR=#0000bb]INSERT INTO
[/COLOR][color=#007700]-- [/color][color=#0000bb]العملية الثانية [/color][color=#007700]-- [/color][COLOR=#0000bb]UPDATE
[/COLOR][color=#007700]-- [/color][color=#0000bb]العملية الثالثة [/color][color=#007700]-- [/color][COLOR=#0000bb]DELETE
[/COLOR][color=#007700]-- [/color][color=#0000bb]الخ [/color][COLOR=#007700]--

[/COLOR][COLOR=#0000bb]COMMIT TRANSACTION  
[/COLOR][/COLOR]



راجع المثال التالي كي تلاحظ الكود بشكل أكبر ، علماً بأن قاعدة البيانات باسم ( BANK ) ، وجدول العملاء باسم ( CUSTOMERS ) ، وحقل الرصيد باسم ( BALANCE ).




كود :
[color=#000000][COLOR=#0000bb] [/color][color=#007700]USE [[/color][color=#0000bb]BANK[/color][COLOR=#007700]]

[/COLOR][COLOR=#0000bb]BEGIN TRANSACTION

    [/COLOR][color=#007700]-- [/color][color=#0000bb]First Code [/color][COLOR=#007700]--
    [/COLOR][color=#0000bb]UPDATE [/color][color=#007700][[/color][color=#0000bb]CUSTOMERS[/color][color=#007700]] [/color][color=#0000bb]SET [/color][color=#007700][[/color][color=#0000bb]BALANCE[/color][color=#007700]] = [[/color][color=#0000bb]BALANCE[/color][color=#007700]] - [/color][color=#0000bb]100 WHERE [/color][color=#007700][[/color][color=#0000bb]NAME[/color][color=#007700]] = [/color][COLOR=#dd0000]'Abdo'
    [/COLOR][color=#007700]-- [/color][color=#0000bb]Second Code [/color][COLOR=#007700]--
    [/COLOR][color=#0000bb]UPDATE [/color][color=#007700][[/color][color=#0000bb]CUSTOMERS[/color][color=#007700]] [/color][color=#0000bb]SET [/color][color=#007700][[/color][color=#0000bb]BALANCE[/color][color=#007700]] = [[/color][color=#0000bb]BALANCE[/color][color=#007700]] + [/color][color=#0000bb]100 WHERE [/color][color=#007700][[/color][color=#0000bb]NAME[/color][color=#007700]] = [/color][COLOR=#dd0000]'Ahmed'

[/COLOR][COLOR=#0000bb]COMMIT TRANSACTION  
[/COLOR][/COLOR]



وبذلك تضمن تماماً عدم تنفيذ أياً من العمليات والأكواد المكتوبة إلا إذا تم تنفيذ الجميع بشكل سليم ، وأكيد ستتساءل عن كيفية عمل مثل هذه العمليات فنيا داخل محرك السيكوال سيرفر ، فكيف يقوم المحرك ذاته بالتراجع عن إجراء قد قام بتنفيذه بالفعل ، وماذا إذا كان هذا الإجراء معقد نوعاً ما ... وهنا سأجيبك بأن هذا كله يتم تنفيذه داخل ملف الـ LOG الخاص بقاعدة البيانات ، وحين يصل الكومبايلر للسطر COMMIT ، فحينها يتم تطبيق تلك السطور الكودية على قاعدة البيانات ذاتها


بالتوفيق للجميع
}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  طريقة عرض الأيام باللغة العربية في استعلام SQL Server ggtt17121985 0 1,063 12-10-23, 10:22 PM
آخر رد: ggtt17121985
  مساعده في تثبيت SQL Server Owz 1 437 22-09-23, 01:54 AM
آخر رد: Taha Okla
Photo [SQL] رسالة خطأ عند تنصيب sql server 2008 عثمان محمد جبور 2 1,745 07-10-21, 09:02 AM
آخر رد: عثمان محمد جبور
  تاريخ تنصيب ال SQL Server وتاريخ الانتهاء للنسخة ال Evaluation عمر المستشار 1 3,194 21-01-21, 02:00 PM
آخر رد: akrem72
  كيفية تحويل mdf الى mdb أو accdb Sajad 1 7,119 05-09-20, 12:00 PM
آخر رد: awidan76
  دورة في برنامج SQL Server 2008 تحت إشراف الاستاذ المهندس أحمد النجار ابو ابراهيم 2 6,321 15-04-20, 06:26 PM
آخر رد: nizar haider
  استفسار حول SQL SERVER MANGER mne3000 1 1,758 05-04-20, 01:21 AM
آخر رد: محمد كريّم
  max From views in sql server nabil.1710 2 2,280 15-01-20, 04:57 AM
آخر رد: EYADISMAIL
  مشكلة في تحميل sql server 2014 انيس القبائلي 0 1,839 09-01-20, 08:22 PM
آخر رد: انيس القبائلي
  [مقال] النسخ الاحتياطي التلقائي - Auto Back Up SQL Server Databases ابو ليلى 5 16,139 24-10-19, 03:43 PM
آخر رد: nouribenyahia

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم