تخطَّ إلى المحتوى

قواعد البيانات والجداول في MySQL

الدرس 2 من 12 · MySQL

في هذا الكورس سنبني معاً قاعدة بيانات لمتجر إلكتروني صغير: منتجات، وعملاء، وطلبات. وفي هذا الدرس سنضع الأساس: قاعدة البيانات نفسها، وأول جدول فيها. ستتعرف على أنواع البيانات الخاصة بـ MySQL، وعلى ميزة ستستخدمها في كل جدول تقريباً: الترقيم التلقائي.

خادم 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 مثل مبنى أرشيف، وكل قاعدة بيانات غرفة مستقلة فيه، وكل جدول خزانة ملفات داخل الغرفة.

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
);
النوع يخزن مثال
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… فلا تحتاج أن تختار رقماً بنفسك عند إضافة منتج. مثل آلة الأرقام في البنك: تسحب ورقة، فتعطيك الرقم التالي تلقائياً.

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، وهل هو مفتاح، وقيمته الافتراضية. مفيد جداً عندما تعمل على قاعدة بيانات صممها غيرك.

ماذا لو حاولنا إضافة منتج بتصنيف غير موجود في 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) المفعّل افتراضياً في الإصدارات الحديثة.

  1. أنشئ قاعدة بيانات باسم library بترميز utf8mb4.
  2. أنشئ جدول books فيه: id بترقيم تلقائي، و title من نوع VARCHAR(150) إجباري، و price من نوع DECIMAL(6, 2)، و language من نوع ENUM('عربي', 'إنجليزي')، و published من نوع DATE.
  3. نفّذ DESCRIBE books; وتأكد من النتيجة.
  4. جرّب إضافة كتاب بلغة «فرنسي» ولاحظ الخطأ.
  • نسيان utf8mb4: تظهر الحروف العربية علامات استفهام ????. حدد الترميز عند إنشاء القاعدة.
  • نسيان USE: خطأ No database selected. اختر القاعدة أولاً بـ USE shop;.
  • FLOAT للأسعار: قد تظهر أرقام مثل 199.98999 في الحسابات. استخدم DECIMAL.

سؤال

ما فائدة AUTO_INCREMENT في عمود id؟

سؤال

لماذا نستخدم الترميز utf8mb4 في قواعد البيانات العربية؟

  • CREATE DATABASE ... CHARACTER SET utf8mb4 ثم USE لاختيار القاعدة.
  • أهم الأنواع: INT و VARCHAR(n) و TEXT و DECIMAL للأموال و DATE و DATETIME و ENUM.
  • AUTO_INCREMENT PRIMARY KEY يرقّم الصفوف تلقائياً.
  • SHOW TABLES و DESCRIBE لاستكشاف القاعدة والجداول.
  • الوضع الصارم يرفض القيم غير الصالحة، كتصنيف خارج ENUM أو نص أطول من المسموح.