قواعد البيانات والجداول في MySQL
في هذا الكورس سنبني معاً قاعدة بيانات لمتجر إلكتروني صغير: منتجات، وعملاء، وطلبات. وفي هذا الدرس سنضع الأساس: قاعدة البيانات نفسها، وأول جدول فيها. ستتعرف على أنواع البيانات الخاصة بـ MySQL، وعلى ميزة ستستخدمها في كل جدول تقريباً: الترقيم التلقائي.
إنشاء قاعدة البيانات
Section titled “إنشاء قاعدة البيانات”خادم MySQL الواحد يحتوي عدة قواعد بيانات، لكل مشروع قاعدته. ننشئ قاعدة متجرنا:
CREATE DATABASE shop CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;USE shop;CREATE DATABASE shop: أنشئ قاعدة اسمهاshop.CHARACTER SET utf8mb4: الترميز الذي يدعم كل حروف العالم، ومنها العربية والرموز التعبيرية. هذا السطر مهم جداً لأي موقع عربي.COLLATE utf8mb4_unicode_ci: قواعد المقارنة والترتيب للنصوص. والحرفانciيعنيان «لا يهتم بالأحرف الكبيرة والصغيرة».USE shop: اجعلshopالقاعدة الحالية التي ستعمل عليها الأوامر التالية.
تخيّل خادم MySQL مثل مبنى أرشيف، وكل قاعدة بيانات غرفة مستقلة فيه، وكل جدول خزانة ملفات داخل الغرفة.
إنشاء جدول المنتجات
Section titled “إنشاء جدول المنتجات”CREATE TABLE products ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, category ENUM('كتب', 'إلكترونيات', 'أدوات مدرسية') NOT NULL, price DECIMAL(8, 2) NOT NULL, stock INT DEFAULT 0, added_on DATE);أنواع البيانات في MySQL
Section titled “أنواع البيانات في MySQL”| النوع | يخزن | مثال |
|---|---|---|
INT |
أعداد صحيحة | 15 |
VARCHAR(100) |
نص بحد أقصى 100 حرف | 'سماعة لاسلكية' |
TEXT |
نص طويل، كالوصف والمقالات | |
DECIMAL(8, 2) |
رقم عشري دقيق: 8 أرقام، منها 2 بعد الفاصلة | 450.50 |
DATE |
تاريخ | '2026-09-15' |
DATETIME |
تاريخ ووقت | '2026-09-15 14:30:00' |
BOOLEAN |
صح أو خطأ، ويُخزَّن كرقم 1 أو 0 | TRUE |
ENUM(...) |
قيمة واحدة من قائمة محددة مسبقاً | 'كتب' |
لماذا DECIMAL للأسعار؟ الأنواع العشرية العادية مثل FLOAT تخزن بعض الكسور بتقريب صغير جداً. هذا مقبول في الحسابات العلمية، لكنه غير مقبول في الأموال، حيث يجب أن يكون كل قرش صحيحاً.
AUTO_INCREMENT: الترقيم التلقائي
Section titled “AUTO_INCREMENT: الترقيم التلقائي”id INT AUTO_INCREMENT PRIMARY KEY تعني: هذا مفتاح أساسي، و MySQL ترقّمه تلقائياً: 1 ثم 2 ثم 3… فلا تحتاج أن تختار رقماً بنفسك عند إضافة منتج. مثل آلة الأرقام في البنك: تسحب ورقة، فتعطيك الرقم التالي تلقائياً.
استكشاف القاعدة
Section titled “استكشاف القاعدة”SHOW TABLES;DESCRIBE products;ناتج DESCRIBE:
| Field | Type | Null | Key | Default | Extra |
|---|---|---|---|---|---|
| id | int | NO | PRI | NULL | auto_increment |
| name | varchar(100) | NO | NULL | ||
| category | enum(‘كتب’,‘إلكترونيات’,‘أدوات مدرسية’) | NO | NULL | ||
| price | decimal(8,2) | NO | NULL | ||
| stock | int | YES | 0 | ||
| added_on | date | YES | NULL |
DESCRIBE يعرض «بطاقة هوية» الجدول: كل عمود ونوعه، وهل يقبل NULL، وهل هو مفتاح، وقيمته الافتراضية. مفيد جداً عندما تعمل على قاعدة بيانات صممها غيرك.
MySQL تحرس البيانات
Section titled “MySQL تحرس البيانات”ماذا لو حاولنا إضافة منتج بتصنيف غير موجود في ENUM؟
INSERT INTO products (name, category, price) VALUES ('كرة', 'رياضة', 50);الناتج: ERROR 1265 (01000): Data truncated for column 'category' at row 1
واسم أطول من 100 حرف؟
الناتج: ERROR 1406 (22001): Data too long for column 'name' at row 1
في الحالتين رفضت MySQL البيانات، ولم تحفظ شيئاً. هذا بفضل الوضع الصارم (Strict Mode) المفعّل افتراضياً في الإصدارات الحديثة.
جرّب بنفسك
Section titled “جرّب بنفسك”- أنشئ قاعدة بيانات باسم
libraryبترميزutf8mb4. - أنشئ جدول
booksفيه:idبترقيم تلقائي، وtitleمن نوعVARCHAR(150)إجباري، وpriceمن نوعDECIMAL(6, 2)، وlanguageمن نوعENUM('عربي', 'إنجليزي')، وpublishedمن نوعDATE. - نفّذ
DESCRIBE books;وتأكد من النتيجة. - جرّب إضافة كتاب بلغة «فرنسي» ولاحظ الخطأ.
أخطاء شائعة
Section titled “أخطاء شائعة”- نسيان utf8mb4: تظهر الحروف العربية علامات استفهام
????. حدد الترميز عند إنشاء القاعدة. - نسيان USE: خطأ
No database selected. اختر القاعدة أولاً بـUSE shop;. - FLOAT للأسعار: قد تظهر أرقام مثل
199.98999في الحسابات. استخدمDECIMAL.
اختبر نفسك
Section titled “اختبر نفسك”سؤال
ما فائدة AUTO_INCREMENT في عمود id؟
الترقيم التلقائي يعطي كل صف جديد الرقم التالي تلقائياً، فلا تحتاج لاختياره بنفسك.
سؤال
لماذا نستخدم الترميز utf8mb4 في قواعد البيانات العربية؟
utf8mb4 يدعم كل حروف يونيكود، وبدونه قد تظهر النصوص العربية علامات استفهام.
الخلاصة
Section titled “الخلاصة”CREATE DATABASE ... CHARACTER SET utf8mb4ثمUSEلاختيار القاعدة.- أهم الأنواع:
INTوVARCHAR(n)وTEXTوDECIMALللأموال وDATEوDATETIMEوENUM. AUTO_INCREMENT PRIMARY KEYيرقّم الصفوف تلقائياً.SHOW TABLESوDESCRIBEلاستكشاف القاعدة والجداول.- الوضع الصارم يرفض القيم غير الصالحة، كتصنيف خارج
ENUMأو نص أطول من المسموح.