![]() |
الدرس الثاني عشر(قواعد البيانات) بسم الله الرحمن الرحيم والصلاة والسلام على اشرف الانبياء والمرسلين اما بعد ، ففي هذا الدرس بمشيئة الله تعالى سنتطرق الى مفاهيم عامة عن قواعد البيانات عموما وعن الـ Mysql خصوصاً ، لتكون بداية فهم لقواعد البيانات الهامة لأي لغة برمجة . في البداية سنتعرف على مصطلح الـ RDBMS ، ونعني بذلك قواعد البيانات العلائقية ، والتي من خصائصها سهولة الوصول الى البيانات المخزنة فيها ، وسرعة اتمام عمليات الاستعلام المختلفة ، وبالاضافة الى المميزات الأخرى فان هذه النوع يعتبر الأكثر استخداماً في جميع التطبيقات سواء المستخدمة فيي الانترنت أو ذات الطابع البرمجي الخاص ، وبطبيعة الحال فإن الـ Mysql من هذا النوع . ومن المهم معرفة بعض الاساسيات في الـ RDBMS ، والتي من شأنها تسهيل عملية فهمك التام لطريقة عملها والتعامل معها .. 1- الجداول Tables : تعتبر أكبر جزء في قاعد البيانات ، وهي عبارة عن أعمدة وصفوف تحتوي على قيم معينة . 2- الأعمدة Columns : لكل عمود في الجدول أسم خاص يختلف عن أسماء الأعمدة الأخرى في نفس الجدول ، ويجب ان يكون لكل عمود نوع خاص به يصف نوع البيانات التي ستخزن فيه ، وكم يظهر في الصورة ، فان عمود الرقم من النوع الرقمي Integer ، اما الحقلين الآخرين فهي نصوص Text . 3- الصفوف Rows : كل صف من صفوف الجدول يحتوي على قيم مختلفة ويمثل معلومات متكاملة عن قطاع معين ، وفي مثالنا يمثل معلومات متكاملة عن سخص معين . 4- القيم Values : وهي ما تحتوي عليه تقاطعات الصفوف بالاعمدة . 5- المفاتيح Keys : وتعتبر من اساليب تسهيل الوصول الى المعومات في قواعد البيانات ، وفي مثالنا السابق نرى أن العمود Id يحتوي على ارقام متسلسلة لا تتكرر نهائياً بل أنها تتكون بشكل تلقائي عند ادراج أي صف جديد للجدول ، وبالتالي فإنها تعتبر المفتاح المناسب لكل صف من صفوف الجدول لضمان عدم الالتباس في اختيار الصفوف . فلو افترضنا أن لدينا جدولين في قاعدة بيانات ، يحتوي الجدول الأول على معلومات عن الدروس مفصلة على عدة حقول لتلك الدروس ، على سبيل المثال : الرقم ( id ) ، الدرس ( lesson ) ، رقم الكاتب ( Key_author ) .. ويحتوي الجدول الثاني على بيانات الأعضـاء كما يلي : الرقم ( Key_author ) ، الاسم ( name ) .. والمطلوب هو طريقة لربط الجدولين ، بحيث أن رقم الكاتب في جدول الدروس ( Key_author ) يدل على اسم الكاتب في جدول الاعضـاء ( name ) . بالتدقيق في المثال يتضح أن الحقلين ( أو العمودين ) Key_author في كلا الجدولين هو مفتاح الربط بينهما ، ولذلك يمكن الوصول الى اسم الكاتب اعتماداً على رقمه من جدول الدروس ، وبالتالي الربط بين الجدولين . لن اتحدث طويلاً عن مقدمات قواعد البيانات Mysql ، ولكن بهذه المقدمة البسيطة يمكن على الاقل تصور بعض الاساسيات حول قواعد البيانات عموماً والـ Mysql خصوصاً ، ومن وجهة نظري فالاهم هو كيفية التعامل مع قواعد البيانات بما يخدم احتاجاتنا مع الـ PHP ، ولذلك ساتطرق في هذ الدرس الى نقطة هامة جداً وهي ادارة قواعد البيانات ، وأعني بذلك عملية انشاء قواعد البيانات والجداول والتحكم في الحقول والبيانات وغيرها ، لتكون الاسـاس للتعامل مع قواعد البيانات لاحقاً عن طريق الـ PHP ، ولعمل ذلك يوجد عدة طرق من اهمها الطريقة التقليدية المباشرة بالاعتماد على نظام الدوس في ذلك وبدون استخدام أي برامج أخرى للادارة . الاتصال بالـ Mysql ، والتعامل معها : كما قلنا أن الطريقة التقليدية هي الاتصال بقواعد البيانات عن طريق سيرفر الـ Mysql وبدون استخدام أي مكونات أخرى ، ولعمل ذلك نحتاج أن نعرف مسار سيرفر الـ Mysql على الجهاز المستخدم بعد عملية التثبيت ، كما قمنا بذلك في درس المقدمة ، وعادة يكون المسـار كالتالي ( C:\mysql\bin ) ، وبذلك يمكن تشغيل البرنامج mysql.exe من داخل الـ Dos . عموماً طريقة الاتصال بقاعدة البيانات هي كالتالي : mysql –h HostName –u UserName –p مع استبدال الـ HostName باسم السيرفر لديك ، سواء كان السيرفر على نفس الجهاز وفي هذه الحالية تكتب localhost ، أو أن السيرفر الذي تود الاتصال به ليس على نفس الجهاز وبذلك تكتب المسار الكامل لاسم الـسيرفر ( HostName ) ، ومع استبدال الـ UserName باسم المستخدم الخاص بالـ Mysql لديك ، بعد ذلك سيتم طلب كلمة المرور الخاصة بقاعدة البيانات بعد الضغط على Enter ، قم بادخالها وسيتم فتح الاتصال بالـ Mysql ، كما يمكن كتابة mysql فقط ليتم فتح الاتصال بقاعدة البيانات فقط اذا كنت تعمل على نفس الجهاز وليس جهاز أخر . سيظهر المؤشر الخاص باوامر الـ Mysql كالتالي : mysql> وبهذا نكون وصلنا الى المكان المطلوب لكتابة اوامر الـ Mysql والتحكم بها . الأمر الأول الذي سنقوم بكتابته يقوم باستعراض قواعد البيانات الموجودة على السيرفر والامر هو : show databases; بعد كتابة هذا الأمر ( بعد مؤشر الـ mysql> ) ، سيتم استعراض قواعد البيانات في السيرفر الذي قمنا بالاتصال به ، وفي حالة عدم وجود أي قاعدة بيانات قمت باعدادها من قبل ، فان من الطبيعي أن تجد قاعدتي بيانات موجودة بشكل تلقائي عند تثبيت السيرفر Mysql ، وتلك القاعدتان هي test – mysql . ولمحاولة فهم الموضوع بشكل أكبر ، سنقوم بالتطرق الى مثـال يبين كيفية انشاء قاعدة بيانات ، وكيفية الدخول لها والتعامل معها وانشاء الجداول ، ومن ثم حذفها .. بعد استعراض قواعد البيانات بالأمر السابق ، سنقوم بانشاء قاعدة بيانات باسم PHP ، ولعمل ذلك قم بكتابة الأمر التالي : create database PHP; لو قمنا بكتابة الأمر السابق ( show database ) سنرى أن قواعد البيانات أصبحت 3 باضافة القاعدة PHP الى القاعدتين mysql – test ، ولاستخدام اي منها نقوم بكتابة الأمر التالي في مثالنا مع القاعدة PHP : use PHP; وهذه يعني الدخول في قاعدة البيانات PHP واستخدام المؤشر ( mysql> ) لكتابة الأوامر المتعلقة بالتعامل مع قاعدة بيانات بعينها . أول هذه الاوامر هو أمر انشاء جدول في قاعدة البيانات ، وهذه الأمر يحتاج الى تفصيل دقيق لبعض الخصائص مثل اسماء الحقول وانواع البيانات فيها ، وبعض الاشياء الأخرى ، عموماً قم بكتابة الأمر التالي وساقوم بشرح كافة التفاصيل بعد المثال : create table users ( id Int not null auto_increment Primary Key, name text not null, counter int ); شرح المثال : - قمنا بكتابة ( create table users ) وهذا يعني انشاء جدول باسم users . - القوس ) يعني بداية تسمية حقول الجدول وخصائص تلك الحقول . - السطر الأول من اسماء الحقول هو ( id ) والرمز ( int ) يعني وصف نوع البيانات التي ستخزن في الـحقل ( id ) ، وهي في هذه الحالة تعني نوع البيانات الرقمية ، اما الرمز ( not null ) فيعني عدم امكانية أن يكون هذا الحقل فـارغاً ، بل يجب أن يحتوي على قيمة ، والـ ( auto_increment ) يجعل الحقل يحتوي على قيم متسلسلة يستحيل تكرارها ، وسيبدأ من الرقم 1 ويبدأ بالزيادة بمقدار واحد في كل مرة يتم ادخال صف جديد الى هذا الجدول ، وفي النهاية الرمز ( Primary Key ) يعني أن الحقل هو المفتاح الرئيسي لهذا الجدول أو بمعني أنه سيتم التفريق بين صفوف الجدول اعتماداً على هذا الحقل ولهذا وضعنا ( auto_increment ) لضمان عدم اختلاط البيانات . - السطر الثاني يحتوي على اسم الحقل ( name ) ونوع البيانات ( text ) أي نصي ، ونفس الرمز السابق الذي ذكرناه وهو ( not null ) . - السطر الثالث يحتوي على اسم الحقل ( counter ) ونوع البيانات ( int ) ، ولاحظ أننا لم نذكر ( not null ) وبالتالي يمكن أن يكون هذا الحقل فارغاً لا يحتوي على أي قيمة ، ولن يكون هناك أي تعارض أو مشكلة بعكس الحقلين السابقتين . - في السطر قبل الأخير ، أي قبل علامة الاغلاق ( ، سيكون بدون فاصلة . - السطر الأخير يحتوي على اقفال عملية انشاء الجدول بالعلامة ); . عموماً هذا المثال يعطي نبذة بسيطة عن كيفية اجراء مثل هذه الاوامر ، وسنتطرق الى بقية الأوامر في الأسطر القليلة القادمة . يمكنك استعراض الجداول الموجودة في قاعدة بيانات عن طريق الأمر : show tables; ولو قمت بتطبيق ذلك على المثال السابق فسترى أن الجدول users موجود في قاعدة البيانات PHP التي قمنا بانشاءها . يمكن كذلك استعراض خصائص الجدول السابق users الذي قمنا بانشاءه في المثال السابق ، عن طريق الأمر التالي : describe users; سترى أن حقول الجدول وخصائص كل جدول ظهرت لك بشكل واضح . - التعامل مع بيانات الجداول : بقي أن نذكر الطرق التي يمكن من خلالها ادخال البيانات الى الجدول users ، بل وكيفية التعامل مع تلك البيانات بالتعديل والحذف وغير ذلك ، وكما قلنا سابقاً أن هذه الاساسيات مفيدة جداً في البرمجة بلغة الـ PHP ، بل إن فهم هذه الطرق هو المفتاح الاساسي للتعامل مع قواعد البيانات عن طريق البي اتش بي ، عموماً أول تلك الأوامر هو اضافة صف جديد الى الجدول ، وهذا ما يبينه المثال التالي : insert into users set name = “Ahmad”; counter = 3 ; مع ملاحظة أن users هو اسم الجدول ، name اسم الحقل ( العمود ) الأول ، counter اسم الحقل ( العمود ) الثاني ، كما تلاحظ أن الحقل id لم نتطرق له ، لاننا في اعدادنا للجدول ذكرنا أن الحقل id ( auto_increment ) أي ستضاف اليه القيم بشكل تلقائي وبشكل منظم ، كما قلنا في كل مرة يزيد العداد بقيمة 1 ، و بطبعية الحال يمكنك القياس على هذا المثال باستبدال ما يجب استبداله من اسم الجدول ( users ) واسماء الحقول ( name – counter ) وكذلك البيانات بما يناسب الذي تريد القيام به . هذا بالنسبة لاضافة بيانات جديدة الى جدول معين ، اما بالنسبة لاستعراض البيانات في الجدول فكما يلي : select * from users; ومعني select ( اختر ) ، ولذلك ستجد أن جميع البيانات التي في الجدول users قد تم سردها ، واذا كنت ملتزماً بالمثال السابق حرفياً فستجد أن البيانات التي اضفناها في المثال السابق ظهرت على شكل صف من صفوف الجدول ، وبالتالي كلما اضفت صفاً جديداً الى الجدول وقمت باستعراض البيانات تجد أن بياناتك قد تم تخزينها ، وينطبق الكلام السابق حول الاستبدال هنا ايضا ، فيمكن استبدال اسم الجدول users باي اسم لجدول في قاعدة البيانات المستخدمة ، وللتاكد من اسماء الجداول قم باستخدام الطريقة السابق ذكرها وهي ( show tables ) . النقطة الأخيرة التي ساتطرق لها هي ما يجب معرفته حول الأمر select وهو كثرت استخدامه في التعامل عن طريق البي اتش بي ، وبالتالي يجب عليك فهم طريقة كتابته بشكل كامل ، بالاضافة الى خيارات الاختيار إن صح التعبير ، وهي ما يتم كتابته بعد الجملة السابقة من خيارات تحدد طريقة اختيار البيانات من شروط وترتيب وحدود وهذا ما ساذكره في الاسطر القليلة القادمة . فلفترض أن الجدول السابق يحتوي على أكثر من صف من البيانات بالشكل التالي : اما البيانات التي نود جلبها فهي كما يلي لكل نقطة على حدة : 1- بيانات الاعضاء الذين ليس لهم أي موضوع . 2- بيانات الاعضاء الذين لهم مواضيع أكثر من 5 مرتبين من الاكثر الى الاقل . 3- بيانات العضو Ahmed . 4- بيانات جميع الاعضاء مرتبين حسب الاسم . 5- بيانات العضو الأكثر مواضيعاً . سنأخذ كل حالة على حدة ، أما الحالة الأولى فيمكن التعامل معها كما يلي : select * from users where counter=0; الزيـادة التي قمنا بوضعها هي ( where counter=0 ) أي بحيث أن الحقل ( counter ) يساوي صفر ، وبالتالي سيتم اهمال أي صف من البيانات التي لا يحتوي الحقل ( counter ) فيها على القيمة صفر ، وسيتم جلب البيانات التي يحتوي هذا الحقل فيها على صفر . الحالة الثانية : select * from users where counter >= 5 order by counter; في هذا المثال اضفنا الشرط ( where counter >= 5 ) وهو واضح كما في المثال السابق ولكن تم تغيير الشرط لا اقل ولا اكثر ، اما الاضافة الأخرى فهي طريقة الترتيب وهي ( order by counter ) وتعني ( قم بترتيب البيانات المختارة بحسب الحقل counter ) ، وهناك طريقة أخرى للتحكم في الترتيب اما تصاعدي أو تنازلي وذلك باضافة كلمة asc ليكون الترتيب تنازلياً كما هو الحال في المثال السابق ، فسواء ذكرت ذلك أو سيتم اعتبارها تنازلياً بشكل تلقائي ، اما الاهم فهو طريقة الترتيب التصاعدي من الاقل الى الاكبر ويتم ذلك عن طريق كتابة الكلمة desc بعد الترتيب مباشرة لتصبح كما يلي : select * from users where counter >= 5 order by counter desc; الحالة الثالثة : select * from users where name = “Ahmed”; لاحظ أن الفرق الوحيد هنا هو استخدام علامات التنصيص ، لان نوع البيانات نصية . الحالة الرابعة : select * from users order by name; وقد أوردت هذا المثال لبيان أنه يمكن استخدام أحد الخيارات لجلب البيانات وترك باقي الخيارات ، فيمكن كما في المثال استخدام خيار الترتيب ( order ) وعدم استخدام الخيارات الباقية ( where – limit ) ، اما الخيار where فقد تطرقنا لنا سابقاً وتعرفنا على فائدته ، والخيـار الأخر limit هي ما سيتم التطرق اليه في المثال التالي الخاص بالحالة الخامسة : الحالة الخامسة : select * from users order by counter limit 1; والـ limit تعني عدد الصفوف المختارة ، أي لو قمنا بكتابة المثال السابق بدون الـ limit ستجد أن جميع البيانات سيتم اختيارها ، ولكن باستخدام الـ limit نقوم بتحديد عدد الصفوف التي سيتم اختيارها استناداً على طريقة ترتيبنا للبيانات ، فكما تلاحظ قمنا بترتيب البيانات بحسب الحقل counter ولم نذكر ( desc ) ولذلك فالبيانات يتم ترتيبها من الاكبر الى الاصغر ، وبالتالي فاختيارنا للحقل الأول يقضي باختيار بيانات الشخص الأكثر كتابة للمواضيع . بقي أن نذكر طريقي التعديل والحذف ليكتمل الدرس ، وسنبدأ بطريقة التعديل على البيانات الموجودة في الجدول users من قاعدة البيانات PHP ، والمثال التالي يوضح الطريقة التي سيتم شرحها بعد المثال : update users set name = “Naser”, counter = 30 where name=”Ahmad”; الجملة update تعني تحدبث أو ( قم بتحديث ) ، والـ users هو اسم الجدول الذي نعمل عليه ، وفي السطر الثاني قمنا باسناد القيمة Naser الى الحقل name ، والسطر الذي يليه قمنا باسناد القيمة 30 الى الحقل counter ، ولكن لو توقفنا هنا بدون ذكر الصف الذي سيتم التعديل عليه ، سيتم تعديل كافة الصفوف في الجدول مهما كان عددها ، ولذلك كتبنا في النهاية where name=”Ahmad” ، بمعنى أن التغيرات السابقة ستحدث فقط على الصف من البيانات التي يحتوي فيها الحقل name على القيمة Ahmad . ربما يكون المثال غير واضح بشكل كافي ، ولكن مع التمرس والمحاولة ستجد أن المسألة منطقية وواضحة بشكل كبير ، عموماً لم يبقى لدينا الا طريقة الحذف ، سواء كان لكل البيانات في الجدول ، أو لصف معين من البيانات وسنرى ذلك في المثالين التاليين ، وهما ما سنختم به هذا الدرس : delete from users; الأمر السابق كفيل بالغاء جميع الصفوف في الجدول users كما هو واضح ، ولذلك كن متأكداً من أن التجارب التي تقوم بها هي على بيانات غير هامة . delete from users where id = 1 ; وهذا الحذف سيتم على الصف الذي يتحقق عليه الشرط ، وفي هذه الحالة على الصف من البيانات التي يحتوي فيها الحقل id على القيمة 1 . منقوووول للافادة |
الساعة الآن 06:47 PM |
[ vBspiders.Com Network ]