مشاهدة النسخة كاملة : استخدام التعليمة Replace في MySQL


المحــ البرمجى ــتوى
11-27-2006, 11:46 AM
عنوان الدرس: استخدام التعليمة Replace في MySQL



في هذا الدرس سنتعرف على تعليمة جديدة في عالم قواعد البيانات, لنبدأ على بركة الله.

# التعليمة Replace :

إن التعليمة replace هي تعليمة مقتصرة على قواعد بيانات MySQL, كما أنها ليست جزءاً من لغة SQL القياسية أو المعيارية.

أما الصيغة القواعدية لهذه التعليمة فهي:

replace into table_name(col_1 , col_2 , … ) values(val_1 , val_2 , … ) ;

لاحظ أن الصيغة القواعدية لهذه التعليمة تشبه تماما الصيغة القواعدية للتعليمة insert , و تعمل هذه التعليمة مع صف تعرف فيه قيمة المفتاح الأساسي, فعندما تقوم باستخدام التعليمة replace فإن MySQL سيبحث عن صف قيمة المفتاح الأساسي له تساوي قيمة المفتاح الأساسي المشار إليها (أي القيمة) في التعليمة, و بالتالي فإذا وجد تطابق سيتم التحديث (أي سيشغل تعليمة update) و إذا لم يجد تطابق فسيتم إدراج صف جديد (أي سيشغل التعليمة insert).

و ندرك من هذا الكلام أن التعليمة replace تعمل ضمنياً وفق الخوارزمية التالية:

إذا كانت القيمة الموجودة في التعليمة replace تطابق القيمة الموجودة في المفتاح الأساسي

قم باستخدام التعليمة update

و إلا

قم باستخدام التعليمة insert

كما أن التعليمة replace تشكل خطورة على البيانات, و لتوضيح آلية عمل replace و الخطورة الممكنة دعنا نأخذ المثال التالي:

سنقوم بتعديل اسم الفيلم the fist of legend إلى fist of legend , مع العلم أن رقم الفيلم هو 5 حيث أن رقم الفيلم هو المفتاح الأساسي, و ذلك باستخدام التعليمة replace :

من البديهي أنك ستقوم بكتابة السطر التالي:

replace into movies(mov_no , mov_name) values(5 , 'fist of legend');

أولاً: آلية عمل replace : سيقوم ملقم قواعد البيانات بالبحث عن المفتاح الأساسي الذي يحمل القيمة 5 فإذا وجدها قام بإجراء التغييرات المناسبة, و إذا لم يجدها قام بإجراء عمليات الإدراج.

ثانياً: الخطورة الكامنة: الخطورة تتجسد عندما يجد الملقم القيمة لذلك سيتم تبديل قيم كل الأعمدة الموجودة في التعليمة و أما قيم الأعمدة الغير موجودة في التعليمة فسيتم إدراج القيم الافتراضية لها. كيف ذلك؟ حسناً .. بالعودة إلى التعليمة التي كتبتها فإنه سيتم تغيير القيمة المخزنة في mov_no إلى 5 و القيمة المخزنة في mov_name إلى fist of legend و أما قيم الأعمدة star_1 , star_2 , kind , price فستتغير القيم التي كانت مخزنة فيها إلى القيم الافتراضية, لذلك فإما أن تستخدم التعليمة update أو أن تضع كل الأعمدة في حال استخدامك التعليمة replace .

قد يتبادر إلى ذهنك سؤال أخي القارئ ما فائدة التعليمة replace , إن فائدتها تكمن في شيئين اثنين هما:

1. أنك بدلا من استخدام التعليمتين update و insert معاً, ستستخدم تعليمة واحدة.

2. و هو الأهم, إن طول المخطوطة ****** المكتوبة بلغة PHP سيكون أقصر بكثير و أقل تعقيداً في حال استخدامك تعليمة replace بدلا من تعليمتي update , insert .

على العموم لا تقلق أخي القارئ فمع كثرة الاستخدام ستعرف إن شاء الله أي تعليمة ستستخدم و في مكانها المناسب, و بقي نقطة أخيرة هي أن التعليمة replace لا تقبل العبارة where ,