TRANSACTIONS in SQL Server

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

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

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

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

  1. سحب ( 100 دولار ) من حسابك الشخصي.
  2. إيداع الـ ( 100 دولار ) في حساب ( أحمد نجم ).

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

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

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

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

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

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

BEGIN TRANSACTION

— العملية الأولى — INSERT INTO
— العملية الثانية — UPDATE
— العملية الثالثة — DELETE
— الخ —

COMMIT TRANSACTION

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

USE [BANK]

BEGIN TRANSACTION

— First Code —
UPDATE [CUSTOMERS] SET [BALANCE] = [BALANCE] – 100 WHERE [NAME] = ‘Abdo’
— Second Code —
UPDATE [CUSTOMERS] SET [BALANCE] = [BALANCE] + 100 WHERE [NAME] = ‘Ahmed’

COMMIT TRANSACTION

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

بالتوفيق للجميع

هذا الموضوع للاخ Mr. Ahmed Negm بارك الله فيه تم النقل لان منتديات الفجول بيسك سوف تتوقف عن العمل

Advertisements

شاركنا بارد

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s