10:52 AM |الساعة الآن   
 
العودة ملتقى الموظف الجزائرى  :: 

منتدى التكنولوجيا والاعلام الالى

 :: 

الكمبيوتر والإنترنت






أهلا وسهلا بك إلى ملتقى الموظف الجزائرى.
أهلا وسهلا بك زائرنا الكريم، إذا كانت هذه زيارتك الأولى للمنتدى، فيرجى التكرم بزيارة صفحة التعليمـــات، بالضغط هنا.كما يشرفنا أن تقوم بالتسجيل بالضغط هنا إذا رغبت بالمشاركة في المنتدى، أما إذا رغبت بقراءة المواضيع والإطلاع فتفضل بزيارة القسم الذي ترغب أدناه.

الرئيسيةالبوابةبحـثس .و .جدخولالتسجيل
اعلان هام للمسجلين الجدد :بمجرد التسجيل يتم إرسال كود التفعيل إلى حسابك .. أي الإيميل الذي وضعته عند التسجيل بالمنتدى ... إذهب إلى علبة البريد فإذا لم تجده في الرسائل الواردة حاول أن تبحث عنه في صندوق بريد الغير مرغوب فيه SPAM



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


شاطر
 #1  
الأربعاء 18 ديسمبر 2013, 17:19
 
 
 
انثى
الاقامة : الجزائر
المشاركات : 29
نقاط : 83
تاريخ التسجيل : 17/12/2013
العمل : طالبة
افتراضي[transactions] عمل الترانزاكشن في قواعد بيانات mysql ، مهم جدا

نبدا على بركة الله
عنوان الدرس: Mysql Transactions

مقدمة: 
هل واجهت في يوم من الايام، انك تريد تنفيذ مجموعة اوامر mysql متتالية
بحيث تريد ان يتم تنفيذها كلها، او في حال حصل خطأ ان يتم ايقافها كلها؟ الجواب طبعا نعم 

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

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

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

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

الان يكفي كلاما، ولنتجه الى التطبيق 


التطبيق:http://www.starsat2014.01lx.net/index.php
تطبيق الموضوع سهل جدا، يتطلب منك شيء بسيط جدا، ولا يتطلب تعديلات كبيرة على الكود الموجود اصلا
بداية لا بد من معرفة 3 مصطلحات

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

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



رمز PHP:
الرمز:
mysql_query("delete from abc where id=2")  
mysql_query("update abc where id=4")  

[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]
لكن عند اضافة الترانزاكشن
بشكل بسيط

رمز PHP:
الرمز:
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")  

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

لكن طريقة الكود السابق، تتميز بالبساطة وعدم الاحتراف 
لذلك خلينا نطور الكود قليلا باستخدام محبوبة المبرمجين Try catch

رمز PHP:
الرمز:

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"); 
}  
http://www.starsat2014.01lx.net/index.php

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

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







 
الإشارات المرجعية


  
وما من كاتب إلا سيفنى . ويبقي الدهر ما كتبت يداه



تعليمات المشاركة
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى

BB code is متاحة
كود [IMG] متاحة
كود HTML متاحة