MySQL: شرح مفصل لعمليات الإدراج والحذف والتحديث في MySQL

آخر تحديث: 2026-08-26

يُعد إدراج البيانات وتحديثها وحذفها من العمليات الأساسية لقواعد البيانات — حيث تشكل أوامر INSERT وUPDATE وDELETE جوهر لغة إدارة البيانات (DML).

يقدم هذا الدرس شرحًا منهجيًّا لكيفية إدراج البيانات وتحديثها وحذفها.

100%
graph TB
    A[DML Operation] --> B[INSERT Insert]
    A --> C[UPDATE Update]
    A --> D[DELETE Delete]
    B --> B1[Single-row insertion]
    B --> B2[Multi-line Insertion]
    B --> B3[Subquery Insertion]
    B --> B4[UPSERT]
    C --> C1[Conditional Update]
    C --> C2[JOIN Update]
    D --> D1[Conditional Deletion]
    D --> D2[TRUNCATE Clear]

1. ما ستتعلمه



2. قصة حقيقية

(1) المشكلة: يُعد إدخال البيانات يدويًّا واحدة تلو الأخرى عملية غير فعالة للغاية

يقوم نظام إدارة المخزون بمعالجة ما يزيد عن 10,000 عملية كتابة بيانات يوميًا. ويقوم موظفو العمليات يدويًّا بتنفيذ عمليات INSERT وUPDATE واحدة تلو الأخرى، وهو ما لا يُعدّ فقط غير فعال للغاية، بل يؤدي أيضًا في كثير من الأحيان إلى تلف البيانات بسبب أخطاء النسخ واللصق. وخلال عملية تعديل الأسعار دفعة واحدة، استغرق تنفيذ أوامر UPDATE واحدة تلو الأخرى ثلاث ساعات؛ وخلال تلك الفترة، أدخل أحد الموظفين عن غير قصد جملة WHERE خاطئة، مما تسبب في تعيين جميع الأسعار في الجدول بأكمله على القيمة 0.

(2) حل يجمع بين العمليات الدفعية والمعاملات

استخدم أوامر INSERT المجمعة، وأوامر UPDATE المعاملاتية، وأوامر DELETE الشرطية، بالاقتران مع INSERT ON DUPLICATE KEY UPDATE، لمعالجة جميع البيانات في عملية واحدة.

البعد العمليات الفردية العمليات المجمعة + المعاملات
10,000 عملية كتابة حوالي 3 ساعات حوالي 3 دقائق
مخاطر الخطأ عالية (عرضة للأخطاء اليدوية) منخفضة (حماية المعاملات)
عدد الرحلات ذهابًا وإيابًا عبر الشبكة 10,000 1
زيادة السرعة 50 ضعفًا


3. INSERT: إدراج البيانات

▶ مثال: إدراج سطر واحد

SQL
-- Insert in Full
INSERT INTO users (username, email, age) 
VALUES ('alice', 'alice@email.com', 25);

-- Omit field names(Must be in order)
INSERT INTO users VALUES (1, 'bob', 'bob@email.com', 30);
▶ جرّب الكود

▶ مثال: إدراج عدة أسطر

SQL
INSERT INTO products (name, price, category) VALUES
('iPhone', 999, 'Phone'),
('MacBook', 1999, 'Laptop'),
('iPad', 599, 'Tablet');
▶ جرّب الكود

▶ مثال: إدراج استعلام فرعي

SQL
-- Insert from Query Results
INSERT INTO user_archive (id, name, email)
SELECT id, name, email FROM users WHERE status = 'deleted';
▶ جرّب الكود

4. التحديث: تحديث البيانات

▶ مثال: التحديث المشروط

SQL
-- Update a Single Record
UPDATE users SET email = 'new@email.com' WHERE id = 1;

-- Update Multiple Records
UPDATE products SET price = price * 1.1 WHERE category = 'Electronics';

-- Multi-Field Update
UPDATE users SET age = age + 1, status = 'active' WHERE id = 1;
▶ جرّب الكود

▶ مثال: UPDATE + JOIN

SQL
-- Related Updates
UPDATE orders o
INNER JOIN customers c ON o.customer_id = c.id
SET o.status = 'priority'
WHERE c.level = 'VIP';
▶ جرّب الكود

5. DELETE: حذف البيانات

▶ مثال: الحذف المشروط

SQL
-- Delete a Single Record
DELETE FROM users WHERE id = 1;

-- Delete Multiple Records
DELETE FROM orders WHERE status = 'cancelled' AND created_at < '2025-01-01';

-- Deleting Related Records
DELETE o FROM orders o
INNER JOIN customers c ON o.customer_id = c.id
WHERE c.status = 'banned';
▶ جرّب الكود

(1) TRUNCATE مقابل DELETE

البعد TRUNCATE DELETE
السرعة سريع جدًا بطيء
المعاملة عدم التراجع التراجع
تم التشغيل لم يتم التشغيل تم التشغيل
AUTO_INCREMENT إعادة التعيين عدم إعادة التعيين
أين غير مدعوم مدعوم
SQL
-- Clear the table (Non-rollbackable)
TRUNCATE TABLE temp_data;


6. INSERT ON DUPLICATE KEY UPDATE

قم بتنفيذ التحديث في حالة وجود تعارض في المفتاح الأساسي أو المفتاح الفريد.

▶ مثال: عملية UPSERT

SQL
-- Insert or Update
INSERT INTO product_stats (product_id, view_count, last_viewed)
VALUES (1, 1, NOW())
ON DUPLICATE KEY UPDATE
    view_count = view_count + 1,
    last_viewed = NOW();

-- Batch UPSERT
INSERT INTO user_scores (user_id, score) VALUES
(1, 100), (2, 200), (3, 300)
ON DUPLICATE KEY UPDATE
    score = VALUES(score);
▶ جرّب الكود

7. REPLACE INTO

احذف أولاً، ثم أدخل (في حالة وجود تعارض).

▶ مثال: REPLACE

SQL
-- Replace if it exists, insert if it doesn't
REPLACE INTO users (id, username, email)
VALUES (1, 'alice_updated', 'alice_new@email.com');
▶ جرّب الكود
⚠️ ملاحظة: تقوم عبارة REPLACE بحذف الصف القديم ثم إدراج صف جديد، مما يؤدي إلى تشغيل كل من مشغلات DELETE و INSERT، كما ستتغير قيمة AUTO_INCREMENT.



8. إرشادات السلامة

الإجراء التوصية
تحديث/حذف يجب تضمين جملة WHERE؛ استخدم أولاً SELECT للتأكد من نطاق العملية
العمليات المجمعة يتم تنفيذها على دفعات تتراوح كل منها بين 1,000 و5,000 صف
بيئة الإنتاج بدء معاملة، ثم تنفيذ الأمر COMMIT بعد التأكيد
النسخ الاحتياطي قبل العملية mysqldump النسخ الاحتياطي

▶ مثال: عملية التحديث الأمني

SQL
-- 1. Check and confirm first
SELECT COUNT(*) FROM orders WHERE status = 'cancelled' AND created_at < '2025-01-01';

-- 2. Start a transaction
START TRANSACTION;

-- 3. Execute Delete
DELETE FROM orders WHERE status = 'cancelled' AND created_at < '2025-01-01';

-- 4. Submit after verifying that everything is correct
COMMIT;
-- Or roll back if a problem is detected
-- ROLLBACK;
▶ جرّب الكود

❓ أسئلة شائعة

س هل يجب أن يتطابق ترتيب الحقول في جملة INSERT مع تعريف الجدول؟
ج لا يلزم أن يتطابق إلا في حالة حذف أسماء الحقول. ويُنصح بتحديد أسماء الحقول صراحةً حتى لا يتم الاعتماد على الترتيب.
س هل يمكن استعادة البيانات بعد تنفيذ أمر DELETE؟
ج يمكنك تنفيذ أمر ROLLBACK ضمن المعاملة. أما بالنسبة للبيانات التي تم تنفيذ أمر COMMIT عليها، فسيتعين عليك استعادتها من نسخة احتياطية. ولا يمكن التراجع عن أمر TRUNCATE.
س كيف يمكنني تحسين أداء عمليات الإدراج (INSERT) المجمعة؟
ج استخدم عبارة VALUES متعددة الصفوف، وأوقف تشغيل ميزة «التثبيت التلقائي»، وقم بتعطيل الفهارس، واستخدم الأمر LOAD DATA INFILE.
س ما الفرق بين INSERT و REPLACE؟
ج تُرجع INSERT خطأً إذا واجهت تعارضًا في المفتاح الفريد، بينما تقوم REPLACE بحذف السجل قبل إدراج سجل جديد (سيتغير المعرّف). نوصي باستخدام ON DUPLICATE KEY UPDATE.
س ما الفرق بين DELETE و TRUNCATE؟
ج تقوم DELETE بحذف الصفوف واحدًا تلو الآخر ويمكن التراجع عنها، بينما تقوم TRUNCATE بإفراغ الجدول، ولا يمكن التراجع عنها، لكنها سريعة للغاية.

📖 ملخص


📝 تمارين

  1. المشكلة الأساسية (مستوى الصعوبة ⭐): أدخل 5 سجلات اختبار في الجدول users.

  2. مشكلة متقدمة (مستوى الصعوبة: ⭐⭐): قم بتنفيذ عداد الزيارات باستخدام INSERT ON DUPLICATE KEY UPDATE.

  3. التحدي (مستوى الصعوبة: ⭐⭐⭐): اكتب برنامجًا لحذف البيانات المؤقتة التي يعود تاريخها إلى 30 يومًا مضت بشكل آمن، باستخدام ميزة حماية المعاملات.

Web-Tutorial.com

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

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

100%