المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : [transactions] عمل الترانزاكشن في قواعد بيانات mysql ، مهم جدا



walid
11-01-2013, بتوقيت غرينيتش 04:32 PM
http://www.dzbatna.com/images/icons/iconrote.gif [transactions] ط¹ظ…ظ„ ط§ظ„طھط±ط§ظ†ط²ط§ظƒط´ظ† ظپظٹ ظ‚ظˆط§ط¹ط¯ ط¨ظٹط§ظ†ط§طھ mysql طŒ ظ…ظ‡ظ… ط¬ط¯ط§ (http://www.dzbatna.com/t1788678/)



السلام عليكم ورحمة الله وبركاته
رواد قسم لغات البرمجة الاعزاء
كيف حالكم جميعا؟ نسال الله لنا ولكم العافية

اعود اليوم بعد غيبة طويلة عن الكتابة
بموضوع مهم جدا، على الاقل من وجهة نظري http://www.dzbatna.com/images/smilies/bleh.gif
مع العلم انه الكثيرين لا يعلمون بوجوده على الرغم من اهميته
لذلك قبل ما ابدا بالشرح طريقة لا بد من توضيح الموضوع بالكلمات

نبدا على بركة الله

عنوان الدرس مفصل: Mysql Transactions

مقدمة:
هل واجهت في يوم من الايام، انك تريد تنفيذ مجموعة اوامر mysql متتالية
بحيث تريد ان يتم تنفيذها كلها، او في حال حصل خطأ ان يتم ايقافها كلها؟ الجواب طبعا نعم http://www.dzbatna.com/images/smilies/tears.gif




تخيل مثلا موقع امازون، عندما تقدم طلب شراء ، فانه يتم عمل استعلامين، الاول هو وضع سجل لتحويل البضائع اليك، والامر الثاني وضع المبلغ المستحق عليك في قاعدة البيانات، تخيل ان يتم وضع الاول، وبعدها يحصل فشل في السيرفر SERVER ويتسجل المبلغ المستحق 0، طبعا ستكون كارثة لو الامور بتجري على هذا النحو.

مثال اخر:
تخيل عملية تحويل مال من حساب الى حساب اخر في البنك
تريد تنقل مثلا 1000 دولار من حساب الى حساب
بدا الاستعلام الاول، وتم خصم 1000 من الحساب الاول
وحين بدا الاستعلام الثاني المسؤول عن الاضافة للحساب الاخر، حصل خطا معين وتوقع النظام

فحينها ستخصم ال 1000 ولن تضاف الى مكان اخر ، لذلك طبعا هذه الامور لا بد من تامينها


هذه الترانزاكشنز او التحويلات
نجدها دائما في العمليات البرمجية الحساسة
في البنوك ، في التجارة الالكترونة، انظمة مراقبة البضائع .... الخ

الان يكفي كلاما، ولنتجه الى التطبيق http://www.dzbatna.com/images/smilies/icon30.gif


التطبيق:
تطبيق الموضوع سهل جدا، يتطلب منك شيء بسيط جدا، ولا يتطلب تعديلات كبيرة على الكود code الموجود اصلا
بداية لا بد من معرفة 3 مصطلحات
Begin: هي لحظة بداية ال transaction
Commit: في حال نجح الاستعلام، نريد تطبيق النتائج على قاعدة البيانات
rollback: في حال حصل خلل، نرجع للحالة الاصلية قبل تنفيذ الاستعلامات جميعها

مثال على استعلام بدون ترانزاكشن
الطريقة عادية ومعلومة للجميع

رمز PHP:

<code style="white-space:nowrap"> <code> mysql_query("delete from abc where id=2")
mysql_query("update abc where id=4")
</code> </code>


لكن عند اضافة الترانزاكشن
بشكل بسيط
رمز PHP:

<code style="white-space:nowrap"> <code> mysql_query("begin")
mysql_query("delete from abc where id=2")
mysql_query("update abc where id=4")
if (mysql_error())
mysql_query("rollback")
else
mysql_query("commit")
</code> </code>


نلاحظ اننا بدانا بجملة joomla begin
ثم نفذنا الاستعلامات، ثم تحققنا من وجود خطا، في حال حصل، بنعمل rollback
في حال كان عدم وجود خلل، بنعمل commit
اي نفذ الامر

لكن طريقة الكود code السابق، تتميز بالبساطة وعدم الاحتراف http://www.dzbatna.com/images/smilies/tears.gif
لذلك خلينا نطور الكود code قليلا باستخدام محبوبة المبرمجين Try catch
رمز PHP:

<code style="white-space:nowrap"> <code>
try {

mysql_query("begin");


mysql_query('first query');
mysql_query('second query');
mysql_query('third query');

mysql_query("commit");
} catch (Exception $e) {
mysql_query("rollback");
}
</code> </code>

الكود code بسيط طبعا
ومفهوم اكثر من الكود code السابق


بهذا نكون وصلنا الى نهاية درس مفصلنا لليوم
اسال الله ان تكونوا قد استفدتم واستمتعتم
اي استفسار حياكم الله
ونراكم في درس مفصل قادم ان شاء الله
والسلام عليكم ورحمة الله وبركاته









ألعاب الأندرويد مجانا و حصريا (http://www.apotox.info/forum)




https://fbcdn-sphotos-d-a.akamaihd.net/hphotos-ak-ash4/482113_236967293114455_1193518507_n.png (http://www.dzbatna.com)
©المشاركات المنشورة تعبر عن وجهة نظر صاحبها فقط، ولا تُعبّر بأي شكل من الأشكال عن وجهة نظر إدارة المنتدى (http://www.dzbatna.com)©

استعمل مربع البحث في الاسفل لمزيد من المواضيع


سريع للبحث عن مواضيع في المنتدى