بسم الله
الرحمن الرحيم والصلاة والسلام على اشرف الانبياء
والمرسلين اما بعد ، ففي هذا الدرس بمشيئة الله تعالى
سنتطرق الى مفاهيم عامة عن قواعد البيانات عموما وعن الـ 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 .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23