أساسيات قاعدة بيانات MySQL

كانت جميع البيانات من الدروس الـ27 السابقة مخزنة في الذاكرة — وتختفي فور تحديث الصفحة. قاعدة البيانات هي المكان الدائم لتخزين بياناتك. يشرح لك هذا الدرس ما هي قاعدة البيانات، وكيفية تصميم الجداول، وكيفية إنشاء أول قاعدة بيانات لك في MySQL.

1. ما هي قاعدة البيانات؟

قاعدة البيانات = نظام ملفات إلكتروني منظم. وهي أفضل بكثير من الملفات النصية من حيث: سرعة البحث، وإمكانية القراءة والكتابة المتزامنة، وسلامة البيانات.

TEXT
Database Server (e.g., MySQL)
 ├── Database "blog"          ← CREATE DATABASE blog;
 │    ├── Table "users"       ← CREATE TABLE users (...)
 │    │    ├── Row: User 1    ← INSERT INTO users ...
 │    │    ├── Row: User 2
 │    │    └── Row: User 3
 │    ├── Table "posts"
 │    └── Table "comments"
 └── Database "shop"
المصطلح التشبيه الوصف
قاعدة البيانات مصنف Excel حاوية بيانات المشروع
جدول ورقة عمل/ورقة يخزن نوعًا واحدًا من البيانات (جدول المستخدمين، جدول المنشورات)
العمود العمود أ، ب، ج... حقل (الاسم، العمر)
الصف صف من البيانات سجل واحد (جون، 25)
المفتاح الأساسي (PK) رقم الصف يُعرِّف كل صف بشكل فريد

2. تثبيت MySQL والاتصال به

(1) نظام ويندوز مع XAMPP

يضم XAMPP كل من MySQL وphpMyAdmin — التثبيت بنقرة واحدة:

  1. قم بالتنزيل من https://www.apachefriends.org → قم بالتثبيت → قم بتشغيل Apache و MySQL
  2. قم بزيارة الموقع http://localhost/phpmyadmin

(2) الاتصال بـ MySQL

BASH
# Command-line connection
mysql -u root -p
# XAMPP's root has no password by default—just press Enter
SQL
-- List existing databases
SHOW DATABASES;

-- For security, set a root password
ALTER USER 'root'@'localhost' IDENTIFIED BY 'your_password';

3. إنشاء قواعد البيانات والجداول

▶ مثال: إنشاء قاعدة بيانات

SQL
-- Create a database
CREATE DATABASE myblog;

-- Select the database
USE myblog;

-- Check the current database
SELECT DATABASE();

-- Delete a database (use with caution!)
-- DROP DATABASE myblog;
▶ جرّب الكود

▶ مثال: إنشاء جدول «المستخدمين»

SQL
-- Create the users table
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    email VARCHAR(100) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL,
    age INT DEFAULT 0,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- View table structure
DESCRIBE users;
-- Or
SHOW COLUMNS FROM users;
▶ جرّب الكود
البند الوصف
AUTO_INCREMENT التزايد التلقائي — يزداد تلقائيًا بمقدار +1 مع كل صف جديد
PRIMARY KEY المفتاح الأساسي — يُعرِّف كل صف بشكل فريد
NOT NULL مطلوب — لا يجوز أن يكون فارغًا
UNIQUE فريد — لا يمكن وجود تكرارات
DEFAULT القيمة الافتراضية
CURRENT_TIMESTAMP الطابع الزمني الحالي

4. أنواع البيانات الشائعة في MySQL

النوع الغرض مثال
INT عدد صحيح age INT → 25
BIGINT عدد صحيح كبير view_count BIGINT → 1000000
FLOAT / DOUBLE النقطة العائمة price FLOAT → 19.99
DECIMAL(M,D) رقم عشري دقيق (نقود) price DECIMAL(10,2) → 19.99
VARCHAR(N) سلسلة متغيرة الطول name VARCHAR(50)
TEXT نص طويل content TEXT
DATE التاريخ birthday DATE → 29 يونيو 2026
DATETIME التاريخ والوقت created_at DATETIME
TIMESTAMP الطابع الزمني updated_at TIMESTAMP
BOOLEAN منطقية (TINYINT(1)) is_active BOOLEAN → 1/0
ENUM مُعدَّدة (خيارات ثابتة) status ENUM('active','banned')
JSON بيانات JSON metadata JSON
💡 نصيحة: استخدم دائمًا DECIMAL للقيم النقدية، ولا تستخدم أبدًا FLOAT — فالأرقام ذات العلامة العائمة تنطوي على أخطاء في الدقة قد تكلفك سنتات.


5. العمليات الأساسية لـ CRUD

العملية عبارة SQL الوصف
إنشاء INSERT INTO table VALUES (...) إضافة صفوف جديدة
قراءة SELECT * FROM table WHERE ... الاستعلام عن البيانات
تحديث UPDATE table SET col=val WHERE ... تعديل البيانات
حذف DELETE FROM table WHERE ... حذف البيانات

▶ مثال: CRUD الأساسي

SQL
-- Insert data
INSERT INTO users (username, email, password, age) VALUES
('John', 'john@example.com', 'hashed_pw_1', 25),
('Jane', 'jane@example.com', 'hashed_pw_2', 22),
('Bob', 'bob@example.com', 'hashed_pw_3', 28);

-- Query
SELECT * FROM users;
SELECT username, email FROM users WHERE age > 23;
SELECT COUNT(*) FROM users;                    -- Count rows
SELECT * FROM users ORDER BY age DESC;         -- Sort by age descending
SELECT * FROM users LIMIT 2;                   -- Only the first 2 records

-- Update
UPDATE users SET age = 26 WHERE username = 'John';
-- ⚠️ Forgetting WHERE updates ALL rows!

-- Delete
DELETE FROM users WHERE id = 3;
-- ⚠️ Forgetting WHERE deletes ALL rows!
▶ جرّب الكود
🔥 خطأ شائع: استخدام UPDATE وDELETE دون شرط WHERE يؤثر على جميع الصفوف! هذا هو «الزر النووي» لعمليات قاعدة البيانات — احرص دائمًا على إعادة التحقق من شرط WHERE قبل التنفيذ.


6. العمل مع phpMyAdmin

phpMyAdmin هي أداة رسومية لإدارة قواعد بيانات MySQL، وهي مثالية للمبتدئين الذين لا يشعرون بالراحة في استخدام سطر الأوامر:

TEXT
http://localhost/phpmyadmin

Steps:
1. Click "New" on the left → enter database name myblog → Create
2. Click the myblog database → "SQL" tab
3. Paste your CREATE TABLE statement → Execute
4. Click the users table → "Insert" tab → fill out the form to insert data
5. "Browse" tab → view your data
6. "Structure" tab → view/modify column definitions
💡 نصيحة: لا بأس من استخدام phpMyAdmin لإجراء العمليات بشكل مرئي كمبتدئ، لكن الدروس القادمة (PDO) ستعلمك كيفية التعامل مع قواعد البيانات من خلال كود PHP — فهذه هي الطريقة التي تعمل بها تطبيقات الويب الحقيقية.


7. إنشاء جدول «المشاركات»

SQL
CREATE TABLE posts (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    title VARCHAR(200) NOT NULL,
    content TEXT NOT NULL,
    status ENUM('draft', 'published') DEFAULT 'draft',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
💡 نصيحة: FOREIGN KEY (user_id) REFERENCES users(id) يضمن أن يكون مؤلف كل منشور مستخدمًا مسجَّلًا بالفعل. ON DELETE CASCADE يعني أن حذف المستخدم يؤدي تلقائيًّا إلى حذف جميع منشوراته.

❓ أسئلة شائعة

س ما هي العلاقة بين MySQL و SQL؟
ج SQL هي لغة (لغة الاستعلام الهيكلية). أما MySQL فهو نظام لإدارة قواعد البيانات (أحد المنتجات البرمجية العديدة التي تعمل بلغة SQL). تمامًا مثلما تُعد JavaScript لغة، وChrome هو المتصفح الذي يعمل بها.
س كيف أختار بين VARCHAR و TEXT؟
ج استخدم VARCHAR للنصوص القصيرة (≤255 حرفًا). استخدم TEXT للنصوص الطويلة. يمكن أن تحتوي VARCHAR على قيم افتراضية؛ بينما لا يمكن ذلك في TEXT. استخدم VARCHAR لأسماء المستخدمين وعناوين البريد الإلكتروني والعناوين. استخدم TEXT لمحتوى المقالات.
س من أي رقم يبدأ AUTO_INCREMENT؟
ج بشكل افتراضي، يبدأ من 1 ويزداد بمقدار 1. إذا حذفت الصف الأخير وأدخلت بيانات جديدة باستخدام INSERT، فسيكون المعرّف التالي هو أقصى معرّف سابق + 1 (لا يتم ملء الفراغات).

📖 ملخص

📝 تمارين

  1. في phpMyAdmin، قم بإنشاء قاعدة البيانات myblog وجدول users (الذي يحتوي على الحقول id/username/email/password/age/created_at). أدخل 5 سجلات لمستخدمين تجريبيين.
  2. أنشئ جدولًا باسم «posts» (id/user_id/title/content/status/created_at). أدخل 3 سجلات للمقالات. استخدم الأمر SELECT للاستعلام عن جميع المقالات المنشورة.
  3. استخدم الأمر UPDATE لتغيير عنوان المقالة. استخدم الأمر DELETE لحذف المقالة التي عفا عليها الزمن. تحقق من النتائج.
Web-Tutorial.com

فريق Web-Tutorial التقني

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

100%