- Creating a Database
- List All Databases
- Delete a Database
- Selecting a Database
- What is a Database Table?
- Creating a Table
- List All Tables
- Show Table Structure
- Delete a Table
- Modify a Table
- Add Data to a Table
- Read Data From a Table
- Update Data in a Table
- Delete Data From a Table
- Escaping String Values and Special Words
- How to Backup a Database
- How to Restore Backup
() translation by (you can also view the original English article)
معظم تطبيقات الويب الحديثة تتعامل مع قواعد البيانات، عادة مع لغة تسمى SQL. لحسن الحظ بالنسبة لنا، هذه اللغة من سهلة جداً للتعلم. في هذه المقالة، سوف نقوم بالبدء مع بعض استعلامات SQL الأساسية واستخدامها للتفاعل مع قاعدة بيانات MySQL.
مالذي تحتاج إليه
SQL (لغة الاستعلامات البنيوية) لغة مصممة للتفاعل مع أنظمة إدارة قواعد البيانات العلائقية (RDBMS)، مثل MySQL، أوراكل، Sqlite إلخ... لتنفيذ استعلامات SQL في هذه المقالة، اقترح أن يكون لديك MySQL مثبت. أوصى أيضا بـ phpMyAdmin كواجهة مرئية لـ MySQL.
التطبيقات التالية تجعل من السهل جداً تثبيت كل من MySQL وphpMyAdmin على جهازك المحلي:
سوف نقوم باستخدام سطر الأوامر للاستعلامات. WAMP يأتي بالفعل مع وحدة تحكم MySQL. لأجل MAMP، قد تحتاج إلى قراءة هذه المقالة.
CREATE DATABASE: إنشاء قاعدة بيانات
هنا يأتي استعلامنا الأول حتماً. سوف نقوم بإنشاء قاعدة بيانات للعمل معها.
أولاً، افتح وحدة تحكم MySQL الخاصة بك وسجل الدخول. لأجل WAMP، كلمة المرور الافتراضية هي فراغ. ولأجل MAMP، ينبغي أن تكون كلمة المرور 'root' بشكل افتراضي.
بعد تسجيل الدخول، أكتب هذا الاستعلام واضغط إدخال:
1 |
|
2 |
CREATE DATABASE my_first_db; |



لاحظ تلك الفاصلة المنقوطة (;) أضيفة في نهاية الاستعلام، مثلما في نهاية أسطر التعليمات البرمجية.
أيضا، العبارة الخاصة 'CREATE DATABASE' حساسة لحالة الأحرف، كذلك جميع الكلمات الخاصة في SQL. ولكن من أجل قابلية القراءة، سوف نقوم بكتابتهم بأحرف كبيرة.
اختياري: مجموعة الأحرف والترتيب
إذا كنت ترغب في تعيين مجموعة الأحرف الافتراضية والترتيب، يمكنك كتابة نفس الاستعلام هكذا بدلاً من ذلك:
1 |
|
2 |
CREATE DATABASE my_first_db DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; |
هنا قائمة من مجموعات الأحرف المعتمدة والترتيبات في MySQL.
SHOW DATABASES: قائمة بجميع قواعد البيانات
يتم استخدام هذا الاستعلام للحصول على قائمة بكافة قواعد البيانات لديك.



DROP DATABASE: حذف قاعدة بيانات
يمكنك حذف قاعدة بيانات موجودة بهذا الاستعلام.



كن حذراً مع هذا الاستعلام، لأنه لا يعطيك أي تحذيرات. إذا كان لديك جداول وبيانات ضمن قاعدة البيانات، سوف يحذفون جميعاً على الفور.
USE: تحديد قاعدة بيانات
هذا من الناحية التقنية ليس استعلام. بل هو 'بيان أو statement'، ولا يتطلب استخدام فاصلة منقوطة في النهاية.



إنه يخبر MySQL بتحديد قاعدة بيانات افتراضية للعمل معها، للدورة الحالية. الآن نحن على استعداد لإنشاء الجداول والقيام بأشياء أخرى ضمن قاعدة البيانات هذه.
ما هو جدول قاعدة البيانات؟
يمكن أن تفكر في جدول قاعدة بيانات مثل جدول بيانات أو ملف csv يحتوي على البيانات المركبة.



تماما مثل ما في هذا المثال، تحتوي الجداول أسماء الأعمدة وصفوف البيانات. مع استعلامات SQL يمكننا إنشاء هذه الجداول. يمكننا أيضا إضافة، قراءة، تحديث وحذف البيانات.
CREATE TABLE: إنشاء جدول
مع هذا الاستعلام يمكننا إنشاء جداول في قاعدة البيانات. لسوء الحظ وثائق MySQL غير ودية للغاية مع المتعلمين الجدد. هيكل هذا النوع من الاستعلام يمكن أن يصبح معقد جداً، ولكن سوف نبدأ مع واحد سهل.
سيقوم الاستعلام التالي بإنشاء جدول مع 2 أعمدة.
1 |
|
2 |
CREATE TABLE users ( |
3 |
username VARCHAR(20), |
4 |
create_date DATE |
5 |
); |
لاحظ أننا قادرون على كتابة استعلام في عدة أسطر، وحتى استخدام علامات التبويب للمسافة الفارغة.
السطر الأول سهل. فقط أنشأنا جدول باسم 'users'. بعد ذلك، بين قوسين، لدينا قائمة بأعمدة جدول مفصولة بفواصل. بعد كل اسم عمود، لدينا نوع بيانات، مثل VARCHAR أو DATE.
(VARCHAR(20 يعني أن العمود من نوع string، ويمكن أن يكون 20 حرفاً طول كحد أقصى. DATE هو أيضا نوع بيانات الذي يستخدم خصيصا لتخزين التواريخ، بهذا الشكل: 'YYYY-MM-DD'.
PRIMARY KEY
قبل أن نقوم بتشغيل هذا الاستعلام، ينبغي أن نشمل أيضا عمود 'user_id'، الذي سيكون PRIMARY KEY. دون الخوض أكثر من اللازم في التفاصيل، يمكن التفكير في PRIMARY KEY كوسيلة لتعريف كل صف من البيانات في جدول.
الآن يصبح الاستعلام:
1 |
|
2 |
CREATE TABLE users ( |
3 |
user_id INT AUTO_INCREMENT PRIMARY KEY, |
4 |
username VARCHAR(20), |
5 |
create_date DATE |
6 |
); |
INT يجعل هذا نوع عدد صحيح 32 بت (أي رقمية). AUTO_INCREMENT تلقائياً يولد رقم معرف جديد كل مرة نقوم بإضافة صفوف جديدة من البيانات. إنه غير مطلوب، ولكن يجعله أكثر ملاءمة.
هذا العمود ليس ضروري أن يكون عددا صحيحاً، ولكنه النوع الأكثر شيوعاً. وجود عمود PRIMARY KEY أيضا غير مطلوب، ولكن من المستحسن بشدة لقاعدة بيانات جيدة التصميم والأداء.
دعونا نشغل الاستعلام:



SHOW TABLES: قائمة بكافة الجداول
هذا الاستعلام يسمح لك بالحصول على قائمة الجداول الموجودة حاليا في قاعدة البيانات.



EXPLAIN: إظهار بنية الجدول
لمشاهدة بنية جدول موجود، يمكنك استخدام هذا الاستعلام.



الحقول (الملقب. الأعمدة) يتم سردهم في النتائج، مع الخصائص الخاصة بهم.
DROP TABLE: حذف جدول
تماما مثل DROP DATABASES، هذا الاستعلام يحذف جدول ومحتوياته، دون تحذير.



ALTER TABLE: تعديل جدول
يمكن أن يكون لهذا الاستعلام أيضا بنية معقدة بسبب العديد من التغييرات التي يمكن أن تؤدى في جدول. دعونا ننظر في بعض الأمثلة البسيطة.
(تأكد من إعادة إنشاء الجدول الذي أسقطناه للتو أو الاستعلامات التالية من الواضح أنها لن تعمل).
إضافة عمود
1 |
|
2 |
ALTER TABLE users |
3 |
ADD email VARCHAR(100) |
4 |
AFTER username; |
بفضل سهولة قراءة SQL، لا أعتقد أن هذا الاستعلام حتى يحتاج تفسيراً.



إزالة عمود



هذا أيضا بسيط جداً. ولكن استخدمه بحذر حيث أنه يزيل البيانات بشكل دائم دون تحذير.
إعادة إضافة عمود البريد الإلكتروني نظراً لأننا ذاهبون لاستخدامه في وقت لاحق:
1 |
|
2 |
ALTER TABLE users |
3 |
ADD email VARCHAR(100) |
4 |
AFTER username; |
تعديل عمود
أحياناً قد تحتاج إلى تغيير خصائص عمود، حتى لا تضطر إلى حذفه وإعادة إنشائه.



هذا يغير تسمية عمود username إلى 'user_name'، ويغير النوع من (VARCHAR(20 إلى (VARCHAR(30. تغيير مثل هذا ينبغي أن لا يعوق أي من البيانات الموجودة في الجدول.
INSERT: إضافة بيانات إلى جدول
دعونا نضيف بعض البيانات إلى الجدول باستخدام هذا الاستعلام.



كما ترون، VALUES() يحتوي على قائمة لقيم الحقل، مفصولة بفواصل. قيم string محاطة بعلامات اقتباس مفردة. والقيم التي تحتاج إلى ترتيب الأعمدة التي تم تحديدها عندما قمنا بإنشاء الجدول.
لاحظ أن القيمة الأولى هي NULL لحقل PRIMARY KEY الذي سميناه 'user_id'. علينا القيام بذلك حيث أنه يتم إنشاء معرف تلقائياً، نظراً لتعيين العمود إلى AUTO_INCREMENT. عند إدخال صف من البيانات للمرة الأولى، سيكون المعرف 1. الصف المدرج القادم سيكون 2 وهكذا...
صيغة بديلة
هنا صيغة أخرى لإدراج الصفوف.



هذه المرة نحن نستخدم الكلمة SET بدلاً من VALUES، ولا يتبعها قوسان. هناك عدد قليل من الأشياء لنلاحظها هنا:
- العمود يمكن أن يتم حذفه. على سبيل المثال نحن لم نعين قيمة إلى user_id، الذي سوف تعود بشكل افتراضي إلى وظيفة AUTO_INCREMENT. إذا قمت بحذف عمود VARCHAR، سوف يكون string فارغ بشكل إفتراضي (إلا إذا تم تحديد قيمة افتراضية مختلفة أثناء إنشاء الجدول).
- كل عمود يتم الرجوع إليه بواسطة اسمه. وبسبب هذا، يمكن أن تكون في أي ترتيب، خلافا للصيغة السابقة السابقة.
صيغة بديلة 2
هنا صيغة أخرى.



مرة أخرى، بما أن كل عمود يشار إليه بالاسم، يمكن أن يكونوا في أي ترتيب.
LAST_INSERT_ID()
يمكنك استخدام هذا الاستعلام للحصول على معرف AUTO_INCREMENT للصف الأخير المدرج، في الدورة الحالية.



NOW()
أعتقد أنه الوقت المناسب لإظهار كيف يمكنك استخدام دالة MySQL داخل الاستعلامات الخاصة بك.
الدالة NOW() تقوم بإرجاع التاريخ الحالي. حيث يمكنك استخدامه لتعيين عمود DATE تلقائياً إلى اليوم الحالي أثناء إدراج صف جديد.



لاحظ أننا تلقينا تحذيراً من MySQL، ولكنه ليس شيء كبير. والسبب أن NOW() فعلياً تقوم بإرجاع معلومات الوقت كذلك.



ولكن العمود create_date الذي أنشأناه فقط يحتوي على التاريخ، وليس الوقت، وبالتالي تم اقتطاع البيانات التي تم إرجاعها. يمكننا استخدام الدالة CURDATE() بدلاً من ذلك، التي تقوم بإرجاع التاريخ فقط، ولكن البيانات المخزنة في النهاية ستكون هي نفسها في كلتا الحالتين.
SELECT: قراءة البيانات من جدول
من الواضح أن البيانات التي أضفناها تكون مجدية إلا إذا كان بإمكاننا قراءتها. هنا حيث يأتي استعلام SELECT.
هنا أبسط استعلام SELECT ممكن للقراءة من جدول:



في هذه الحالة، العلامة النجمية (*) تعني أننا طلبنا جلب كافة الأعمدة من الجدول. إذا كنت تريد فقط أعمدة معينة، الاستعلام سوف يبدو هكذا:



جملة WHERE
أكثر الأحيان، نحن مهتمون فقط في بعض الصفوف، وليس كل شيء. على سبيل المثال، لنفرض أننا نريد عنوان البريد الإلكتروني للمستخدم 'nettuts'.



فكر فيه مثل عبارة IF. حيث أن WHERE تسمح لك بوضع شروط في الاستعلام للحصول على النتائج التي تريدها.
لاحظ أن شرط المساواة، فقط علامة تساوي واحدة مستخدمة (=)، بدلاً من المزدوجة (==) التي يمكن أن تستخدم في البرمجة.
يمكنك استخدام شروط المقارنة الأخرى أيضا:



AND و OR يمكن استخدامها للجمع بين الشروط:



لاحظ أن القيم الرقمية لا يجب أن تكون داخل علامات اقتباس.
IN()
هذا مفيد لمطابقة قيم متعددة.



LIKE
هذا يسمح لك بالقيام ببحث البدل.



يتم استخدام علامة النسبة المئوية (%) كحرف البدل.
جملة ORDER BY
إذا كنت ترغب في النتائج التي يتم إرجاعها بترتيب معين، استخدام هذه الجملة:



الترتيب الافتراضي هو ASC (أي ترتيب تصاعدي). يمكنك إضافة DESC لعكس ترتيبه.
LIMIT ... OFFSET ...
يمكنك تحديد عدد النتائج التي يتم إرجاعها.



LIMIT 2 يحصل فقط على أول 2 نتائج. LIMIT 1 OFFSET 2 يحصل على 1 نتيجة، بعد أول 2 نتائج. LIMIT 2, 1 تعني نفس الشيء، ولكن لاحظ أن الرقم الأول هو الإزاحة والرقم الثاني هو الحد.
UPDATE: تحديث البيانات في جدول
يتم استخدام هذا الاستعلام لتحديث البيانات الموجودة في جدول.



معظم الوقت، يتم استخدامه مع جملة WHERE، لأنك سوف تريد صفوف محددة فقط ليتم تحديثها. إذا كانت عبارة WHERE غير مدرجة، جميع الصفوف سوف تحدث مع نفس التغييرات.
يمكنك أيضا استخدام جملة LIMIT للحد من عدد الصفوف التي سيتم تحديثها.



DELETE: حذف البيانات من جدول
تماما مثل UPDATE، هذا الاستعلام أيضا عادة ما يستخدم مع جملة WHERE.



TRUNCATE TABLE
لحذف كافة محتويات جدول، يمكنك فقط القيام بهذا:
1 |
|
2 |
DELETE FROM users; |
ولكن عادة ما يكون أداء أكثر كفاءة باستخدام TRUNCATE بدلاً من ذلك.



TRUNCATE أيضا تعيد تعيين أرقام AUTO_INCREMENT وبالتالي صف جديد مرة أخرى سوف يكون لديه المعرف 1. ولكن هذا لا يحدث مع استعلام DELETE، والعداد يبقى يتصاعد.
هروب قيم السلاسل والكلمات الخاصة
قيم السلاسل
بعض الأحرف المعينة تحتاج إلى الهروب، وبخلاف ذلك يمكن أن يكون لديك مشاكل.



يتم استخدام خط مائل عكسي (\) للهروب.
هذا أيضا مهم جداً لأسباب أمنية. أي إدخال مستخدم يدخل في قاعدة البيانات يحتاج إلى الهرب بشكل صحيح. في PHP، يمكنك استخدام دالة mysql_real_escape_string() أو استخدام صيغ معدة بما أنهم يهربون تلقائياً.
كلمات خاصة
بما أن MySQL لديه العديد من الكلمات الخاصة مثل SELECT أو UPDATE، يمكنك منع الاصطدام من خلال وضع علامات الاقتباس حول الجدول الخاص بك وأسماء الأعمدة. ولكن هذه ليست علامات الاقتباس العادية. تحتاج إلى استخدام الحرف الخلفي (`).
لنقل أنك تريد أن تضيف عمود بإسم 'delete' لسبب ما:



خاتمة
شكراً لك لقراءة المقالة. امل أنني كنت قادراً على أن أريك أن SQL لديه منحى تعلم سهل لكنها قوية جداً.
رجاء أترك تعليقاتك وأسئلتك، واحظى بيوم رائع!
- تابعنا على Twitter، أو اشترك بتغذية Nettuts+ RSS للحصول على أفضل دروس تطوير الويب على الويب. مستعد
مستعد لتأخد مهاراتك إلى المستوى التالي، والبدأ بالربح من النصوص البرمجية والمكونات الخاصة بك؟ تحقق من سوق شقيقتنا، CodeCanyon.