نواصل موضوعنا شرح TRANSACTIONS (المناقلات) :
يمكن قراءة الدرس السابق من هنا شرح transaction
نقاط الحفظ
تعتبر نقاط الحفظ نقاط مرجعية او نقاط استرجاع ضمن المناقلة, اذ يمكننا عند استعمال الأمر الخاص برد المناقلة او التراجع عنها ان نحدد نقطة الحفظ التي يجب ان تعود اليها .العبارة التي يحددها المعيار SQL99 لإنشاء نقطة حفظ هي العبارة SAVEPOINT وهي من الصيغة :
SAVEPOINT savepoint_name;
هذه الصيغة مدعومة من DB2 و Oracle اما في SQL Server فتستخدم الصيغة التالية :
SAVE TRANSACTION savepoint_name;
اما قواعد بيانات MySQL فلا تدعم نقاط الحفظ .مثال :
لإنشاء نقطة حفظ باسم اسمها BeforChange في قواعد بيانات DB2 و Oracle نكتب الصيغة التالية:
SAVEPOINT BeforeChange;
وفي قواعد بيانات SQL Server تصبح الصيغة كما يلي :
SAVE TRANSACTION BeforeChange;
رد او إلغاء مناقلة:
رأينا سابقاً نستطيع رد مناقلة او التراجع عنها الى نقطة البداية او الى نقطة حفظ يتم تحديدها وذلك عندما تظهر مشكلة ما اثناء تنفيذ مناقلة .صيغة رد مناقلة بحسب معيار SQL99 هي كما يلي:
ROLLBACK [WORK] [TO SAVEPOINT savepoint_name];
الصيغة السابقة تكون صالحة في قواعد بيانات DB2 و Oracle ويعمل ولكن بدون تمكين خيار TO SAVEPOINT في قواعد بيانات MySQL لأنها كما علمنا لا تدعم نقاط الحفظ .
اما في SQL Server فيتم استخدام الصيغة التالية:
ROLLBACK TRANSACTION [<transaction_name>|<savepoint_name>];
مثال :
لدينا مناقلة من الشكل :BEGIN TRANSACTION myTransaction;
Update Accounts SET myBalance = myBalance-100;
SAVE TRANSACTION mySavePoint;
Update Products SET Quantity = Quantity-1;
من صيغة المثال السابق نستطيع استنتاج اننا طلبنا من SQL Server استخدام BEGIN TRANSACTION وSAVE TRANSACTION , في حال اردنا رد المناقلة أي نتراجع الى نقطة الحفظ mySavePoint يمكننا اضافة السطر التالي الى نهاية الصيغة :
ROLLBACK TRANSACTION myTransaction;
اذا اردنا كتابة نفس الصيغة في قواعد بيانات Oracle و DB2 تصبح كما يلي :
Update Accounts SET myBalance = myBalance-100;
SAVEPOINT mySavePoint;
Update Products SET Quantity = Quantity-1;
ROLLBACK TO mySavePoint;
اما في MySQL والتي لا تدعم نقاط الحفظ تصبح الصيغة كما يلي :
BEGIN;
Update Accounts SET myBalance = myBalance-100;
Update Products SET Quantity = Quantity-1;
ROLLBACK;
BEGIN;
Update Accounts SET myBalance = myBalance-100;
Update Products SET Quantity = Quantity-1;
ROLLBACK;
نكتفي بهذا القدر والى الملتقى
لا تنسى دعمنا بالمشاركة .
إرسال تعليق
لا تبخل علينا باقتراحك او قم بمشاركة الموضوع ليستفيد الاخرين ايضاً شكرا لزيارتك عزيزي الزائر