MySQL: مقدمة إلى MySQL ومفاهيم قواعد البيانات الأساسية
يُعد MySQL نظام إدارة قواعد البيانات العلائقية مفتوح المصدر الأكثر انتشارًا في العالم — فهو يجعل تخزين البيانات والاستعلام عنها عملية بسيطة وفعالة.
صُمم هذا البرنامج التعليمي للمبتدئين الذين ليس لديهم أي خبرة سابقة. يبدأ البرنامج بأساسيات قواعد البيانات ويتطور تدريجيًا حتى تصبح بارعًا في استخدام MySQL لإدارة البيانات.
1. ما ستتعلمه
- ما هي قاعدة البيانات ولماذا نحتاج إليها؟
- الفرق بين قواعد البيانات العلائقية وغير العلائقية
- تاريخ MySQL وتطور إصداراتها
- المزايا الرئيسية وحالات استخدام MySQL
- أساسيات تثبيت قاعدة بيانات MySQL والاتصال بها
2. قصة حقيقية لمطور
(1) المشكلة: لم يعد برنامج Excel قادرًا على التعامل مع الأمر
كُلف مدير عمليات التجارة الإلكترونية بمهمة عاجلة:
"قم بتجميع اتجاهات المبيعات خلال الـ 12 شهراً الماضية، بحيث تشمل 5,000 عميل و30,000 طلب — وقدم التقرير إلى الرئيس التنفيذي صباح الغد."
افتح ملف Excel: أكثر من 100,000 صف من البيانات، حجم الملف 50 ميغابايت.
توالت المشاكل واحدة تلو الأخرى:
- يستغرق برنامج Excel 3 دقائق ليفتح، ويحدث فيه تباطؤ كلما قمت بتطبيق مرشح
- أريد ربط «جدول العملاء» بـ«جدول الطلبات»، لكنني كنت أستخدم دالة VLOOKUP إلى درجة أنني كدت أجن.
- تم تحديث البيانات، لكن التقرير لا يتم تحديثه تلقائيًا.
- ثلاثة زملاء يقومون بالتحرير في نفس الوقت؟ تعارضات في الملفات، وفقدان البيانات
(2) حلول قواعد البيانات
إعادة التصميم باستخدام MySQL:
-- Create a Customer Table
CREATE TABLE customers (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100),
email VARCHAR(150)
);
-- Create the Orders Table
CREATE TABLE orders (
id INT PRIMARY KEY AUTO_INCREMENT,
customer_id INT,
amount DECIMAL(10,2),
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES customers(id)
);
-- One SQL Identify Annual Sales Trends
SELECT
DATE_FORMAT(order_date, '%Y-%m') AS month,
COUNT(*) AS total_orders,
SUM(amount) AS total_revenue
FROM orders
WHERE order_date >= '2025-07-01'
GROUP BY month
ORDER BY month;
مقارنة العائد:
| البعد | Excel | MySQL |
|---|---|---|
| استعلام يضم 100,000 صف | أكثر من 30 ثانية | أقل من ثانية واحدة |
| عمليات الربط بين الجداول المتعددة | VLOOKUP اليدوي | الربط التلقائي |
| التحرير التعاوني | تعارضات الملفات | عمليات القراءة/الكتابة المتزامنة دون تعارضات |
| تحديث البيانات | التحديث اليدوي | الاستعلام في الوقت الفعلي عن أحدث البيانات |
| أمن البيانات | مخاطر فقدان البيانات | حماية المعاملات والنسخ الاحتياطي |
3. ما هي قاعدة البيانات؟
قاعدة البيانات هي مستودع يُستخدم لتنظيم البيانات وتخزينها وإدارتها وفقًا لبنية بيانات معينة.
(1) قواعد البيانات مقابل تخزين الملفات
graph TB
A[Data Storage Methods] --> B[File Storage]
A --> C[Database]
B --> D[Excel / CSV / TXT]
B --> E[Manual Management,Low efficiency]
C --> F[Structured Storage]
C --> G[Efficient Queries,Safe and Reliable]
| البعد | تخزين الملفات | قاعدة البيانات |
|---|---|---|
| حجم البيانات | آلاف الصفوف | ملايين إلى مئات الملايين من الصفوف |
| سرعة الاستعلام | بطيئة (مسح كامل للملف) | سريعة (تحسين الفهرس) |
| الوصول المتزامن | غير مدعوم | يدعم الوصول المتزامن للقراءة/الكتابة من قبل عدة مستخدمين |
| سلامة البيانات | غير مضمونة | القيود + المعاملات مضمونة |
| الأمان | على مستوى الملف | أذونات المستخدم + التشفير |
(2) فئات قواعد البيانات
graph TB
A[Database] --> B[Relational Database RDBMS]
A --> C[Non-relational database NoSQL]
B --> D[MySQL / PostgreSQL]
B --> E[Oracle / SQL Server]
B --> F[SQLite]
C --> G[Key-value type: Redis]
C --> H[Document-based: MongoDB]
C --> I[Column Type: Cassandra]
C --> J[Graph Database: Neo4j]
| النوع | المنتجات التمثيلية | نموذج البيانات | السيناريوهات القابلة للتطبيق |
|---|---|---|---|
| علاقاتية | MySQL، PostgreSQL | الجداول (الصفوف + الأعمدة) | البيانات المنظمة، معالجة المعاملات |
| المفتاح-القيمة | Redis | أزواج المفتاح-القيمة | التخزين المؤقت، الجلسات، قوائم المتصدرين |
| قائم على المستندات | MongoDB | مستندات JSON/BSON | البيانات شبه المنظمة، إدارة المحتوى |
| نوع عائلة الأعمدة | كاساندرا | عائلة الأعمدة | تحليلات البيانات الضخمة، بيانات السلاسل الزمنية |
| قاعدة بيانات الرسوم البيانية | Neo4j | العقد + الحواف | الشبكات الاجتماعية، أنظمة التوصيات |
4. المفاهيم الأساسية لقواعد البيانات العلائقية
(1) جدول
الجدول هو الوحدة الأساسية لتخزين البيانات في قاعدة البيانات، ويتكون من صفوف وأعمدة.
graph LR
subgraph customers Table
direction TB
H[id | name | email | created_at]
R1[1 | Alice | alice@email.com | 2025-01-15]
R2[2 | Bob | bob@email.com | 2025-02-20]
R3[3 | Charlie | charlie@email.com | 2025-03-10]
end
| المصطلح | التعريف | مثال |
|---|---|---|
| جدول | مجموعة من البيانات | customers جدول |
| الصف | سجل معين | المعلومات الكاملة عن أليس |
| العمود | خاصية من خصائص البيانات | name العمود |
| المفتاح الأساسي | حقل يُعرِّف كل صف بشكل فريد | عمود id |
| المفتاح الخارجي | حقل يشير إلى جدول آخر | orders.customer_id |
(2) أنواع العلاقات
erDiagram
CUSTOMERS ||--o{ ORDERS : "A customer has multiple orders"
ORDERS ||--|{ ORDER_ITEMS : "An order contains multiple line items"
PRODUCTS ||--o{ ORDER_ITEMS : "An item appears in multiple orders"
| نوع العلاقة | الوصف | مثال |
|---|---|---|
| واحد إلى واحد (1:1) | سجل واحد يقابل سجلًا آخر | المستخدم ↔ بطاقة الهوية |
| واحد إلى عدة (1:N) | سجل واحد يتوافق مع عدة سجلات | العميل → الطلب |
| علاقة متعدد إلى متعدد (M:N) | تتوافق سجلات متعددة مع بعضها البعض | الطلاب ↔ المقررات الدراسية (عبر نموذج التسجيل في المقرر) |
(3) تصنيف لغات SQL
لغة SQL (لغة الاستعلام الهيكلية) هي اللغة القياسية المستخدمة في التعامل مع قواعد البيانات العلائقية.
| الفئة | الاسم الكامل | الكلمات المفتاحية | الغرض |
|---|---|---|---|
| DDL | لغة تعريف البيانات | CREATE/ALTER/DROP | تحدد بنية قاعدة البيانات |
| DML | لغة معالجة البيانات | INSERT/UPDATE/DELETE | إدراج البيانات وتحديثها وحذفها |
| DQL | لغة استعلام البيانات | SELECT | استعلام البيانات |
| DCL | لغة التحكم في البيانات | GRANT/REVOKE | إدارة الأذونات |
| TCL | لغة التحكم في المعاملات | COMMIT/ROLLBACK | التحكم في المعاملات |
5. تاريخ MySQL
(1) سجل الإصدارات
timeline
title MySQL Version History
1995 : MySQL 1.0 Published
: From Sweden MySQL AB Company Development
2000 : MySQL 3.23
: Supports transaction processing
2003 : MySQL 4.0
: Support UNION Search
2005 : MySQL 5.0
: Supports stored procedures、View、Trigger
2008 : Sun Acquisition MySQL AB
2010 : Oracle Acquisition Sun
: Obtain MySQL Ownership
2013 : MySQL 5.6
: InnoDB Full-Text Search
2016 : MySQL 5.7
: JSON Support、Performance Improvements
2018 : MySQL 8.0
: Window Functions、CTE、Characters
2024 : MySQL 8.4 LTS
: Long-Term Support Version
2024 : MySQL 9.0 Innovation
: Latest Innovative Version
(2) فلسفة تصميم MySQL
المبادئ الأساسية لتصميم MySQL:
البساطة أولاً
- سهولة التركيب والإعداد، مع منحنى تعلم سهل
- بناء الجملة بديهي ويشبه إلى حد كبير اللغة الطبيعية
الأداء أولاً
- سرعات قراءة فائقة، مما يجعلها مثالية للحالات التي تتطلب أحمال عمل كثيفة في القراءة وخفيفة في الكتابة
- يوفر محرك التخزين InnoDB معالجة عالية الأداء للمعاملات
النظام البيئي المفتوح
- مفتوح المصدر ومجاني (ترخيص GPL)
- مجموعة متنوعة من الأدوات وبرامج التشغيل الخاصة بأطراف ثالثة
6. المزايا الرئيسية لـ MySQL
(1) مقارنة المزايا
| البعد | MySQL | PostgreSQL | Oracle | SQL Server |
|---|---|---|---|---|
| السعر | مجاني (مفتوح المصدر) | مجاني (مفتوح المصدر) | باهظ الثمن (تجاري) | باهظ الثمن (تجاري) |
| صعوبة التعلم | ⭐ سهل | ⭐⭐ متوسط | ⭐⭐⭐ صعب | ⭐⭐ متوسط |
| أداء القراءة | ⭐⭐⭐ سريع للغاية | ⭐⭐ سريع | ⭐⭐ سريع | ⭐⭐ سريع |
| نشاط المجتمع | ⭐⭐⭐ مرتفع جدًا | ⭐⭐ مرتفع | ⭐ معتدل | ⭐ معتدل |
| حالات الاستخدام | تطبيقات الويب، التجارة الإلكترونية | الاستعلامات المعقدة، نظم المعلومات الجغرافية | أنظمة المؤسسات واسعة النطاق | منظومة ويندوز |
(2) حالات الاستخدام النموذجية
mindmap
root((MySQL Applications))
Web Development
Blog System
E-commerce Platform
Social Networks
Content Management
Enterprise Applications
ERP System
CRM System
Inventory Management
Order Processing
Data Analysis
Log Storage
User Behavior
Report Statistics
Mobile Apps
App Backend
Game Data
Push Notification System
من يستخدم MySQL؟
| الشركة | الغرض |
|---|---|
| Meta (فيسبوك) | بيانات المستخدمين، الشبكة الاجتماعية |
| تويتر | التغريدات، ملفات تعريف المستخدمين |
| GitHub | مستودعات الأكواد، بيانات المستخدمين |
| Airbnb | العروض، الحجوزات، المستخدمون |
| Shopify | البنية الخلفية للتجارة الإلكترونية، والمنتجات والطلبات |
| Booking.com | حجوزات الفنادق، تقييمات المستخدمين |
7. مقدمة موجزة عن MySQL
(1) الاتصال بـ MySQL في ثلاث خطوات
| الخطوة | الأمر/الإجراء |
|---|---|
| 1. التثبيت | تشغيل Docker بأمر واحد (انظر الدرس 2 لمزيد من التفاصيل) |
| 2. الاتصال | mysql -u root -p |
| 3. التحقق | SELECT VERSION(); |
📖 سيتناول الدرس التالي بالتفصيل: التثبيت عبر الأنظمة المختلفة (ويندوز/ماك/لينكس/دوكر)، والاتصال ببرنامج MySQL Workbench، وإعدادات الأمان. ويقدم هذا القسم لمحة عامة سريعة فقط.
▶ مثال: تشغيل Docker بأمر واحد
# Pull and Start MySQL 8.0 (see Lesson 2 for details)
docker run -d --name mysql-tutorial \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=MyPass123! \
mysql:8.0
# Enter MySQL Command Line
docker exec -it mysql-tutorial mysql -u root -pMyPass123!
▶ مثال: التحقق السريع بعد الاتصال
-- View MySQL Version
SELECT VERSION();
-- View All Databases
SHOW DATABASES;
الناتج:
+-----------+
| VERSION() |
+-----------+
| 8.0.36 |
+-----------+
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
▶ مثال: إنشاء أول قاعدة بيانات وجدول لك
-- 1. Create a Database
CREATE DATABASE my_first_db;
-- 2. Using the Database
USE my_first_db;
-- 3. Create a user table
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 4. Insert Data
INSERT INTO users (username, email) VALUES ('Alice', 'alice@example.com');
INSERT INTO users (username, email) VALUES ('Bob', 'bob@example.com');
-- 5. Query Data
SELECT * FROM users;
الناتج:
+----+----------+-----------------+---------------------+
| id | username | email | created_at |
+----+----------+-----------------+---------------------+
| 1 | Alice | alice@example.com | 2026-07-03 10:30:00 |
| 2 | Bob | bob@example.com | 2026-07-03 10:30:01 |
+----+----------+-----------------+---------------------+
▶ مثال: عمليات CRUD على البيانات
-- Conditional Query
SELECT username, email FROM users WHERE username = 'Alice';
-- Update Data
UPDATE users SET email = 'alice_new@example.com' WHERE id = 1;
-- Delete Data
DELETE FROM users WHERE id = 2;
-- Count the number of users
SELECT COUNT(*) AS total_users FROM users;
❓ أسئلة شائعة
📖 ملخص
- قاعدة البيانات هي مستودع يُستخدم لتنظيم البيانات وتخزينها وإدارتها وفقًا لبنية بيانات معينة.
- قواعد البيانات العلائقية تخزن البيانات في شكل جداول (صفوف وأعمدة) وتدعم العلاقات بين الجداول.
- SQL هي اللغة القياسية لمعالجة قواعد البيانات العلائقية، وتنقسم إلى خمس فئات: DDL وDML وDQL وDCL وTCL.
- MySQL هي قاعدة البيانات العلائقية مفتوحة المصدر الأكثر انتشارًا في العالم — فهي بسيطة وسريعة ومجانية.
- MySQL 8.0+ هو الإصدار السائد حاليًا، وهو يدعم ميزات جديدة مثل دوال النوافذ وJSON والأدوار.
- Docker هو أسهل طريقة لتثبيت MySQL
📝 تمارين
-
تمرين أساسي (مستوى الصعوبة: ⭐): قم بتثبيت MySQL 8.0 باستخدام Docker. بمجرد الاتصال، قم بتشغيل
SELECT VERSION();للتحقق من رقم الإصدار. -
مشكلة متقدمة (درجة الصعوبة ⭐⭐): أنشئ قاعدة بيانات باسم
schoolتحتوي على جدول باسمstudents(id، name، age، grade)، وأدخل 5 سجلات، ثم استرجع جميع السجلات. -
سؤال التحدي (مستوى الصعوبة: ⭐⭐⭐): أنشئ الجدول
coursesوالجدول المرتبط بهstudent_courses(علاقة «كثير إلى كثير»)، وصمم الحقول المناسبة، واستخدم عملية «JOIN» للاستعلام عن جميع المقررات الدراسية التي درسها طالب معين.