تقييم الموضوع :
  • 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 2008ٌ2 بالعربي أحمد النجار 2 635 07-11-16, 04:29 PM
آخر رد: thevirus
  كيفية عمل ftb للاسيكوال سيرفر WAEL ABED 1 43 31-10-16, 05:04 AM
آخر رد: أبو عمر
  [مقال] النسخ الاحتياطي التلقائي - Auto Back Up SQL Server Databases ابو ليلى 2 219 07-09-16, 03:53 AM
آخر رد: ابو ليلى
  [SQL] SQL SERVER 2012 adel27 1 490 21-12-15, 09:08 PM
آخر رد: عمر المستشار
  التعامل مع قواعد البيانات Sql Server 2005 خطوة بخطوة Mr. DotNet 10 6,442 29-03-15, 12:31 PM
آخر رد: العيد1403
  استنتاج الارقام العشوائية في ال SQL Server عمر المستشار 1 1,213 01-06-14, 11:03 AM
آخر رد: Sajad
  عمل ملف Script لقاعدة بيانات SQL من داخل برنامج Visual Studio Sajad 0 1,845 17-03-14, 08:36 PM
آخر رد: Sajad
  تنصيب ال SQl Server من خلال Configration File عمر المستشار 2 1,849 14-01-14, 04:58 PM
آخر رد: myalsailamy
  File table in SQL Server 2012 عمر المستشار 0 1,159 10-12-13, 11:33 AM
آخر رد: عمر المستشار
  كيفية تحويل mdf الى mdb أو accdb Sajad 0 1,657 04-07-13, 05:59 PM
آخر رد: Sajad

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


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