MySQL: شرح مفصل لعمليات الإدراج والحذف والتحديث في MySQL
آخر تحديث: 2026-08-26
يُعد إدراج البيانات وتحديثها وحذفها من العمليات الأساسية لقواعد البيانات — حيث تشكل أوامر INSERT وUPDATE وDELETE جوهر لغة إدارة البيانات (DML).
يقدم هذا الدرس شرحًا منهجيًّا لكيفية إدراج البيانات وتحديثها وحذفها.
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. ما ستتعلمه
- الإدراج: عمليات الإدراج أحادية الصف، ومتعددة الصفوف، وعمليات الإدراج باستخدام الاستعلامات الفرعية
- تحديث: آخر المستجدات بشأن الأوضاع
- الحذف بشروط
- TRUNCATE: إفراغ الجدول
- INSERT ON DUPLICATE KEY UPDATE
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: إدراج البيانات
▶ مثال: إدراج سطر واحد
-- 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);
▶ مثال: إدراج عدة أسطر
INSERT INTO products (name, price, category) VALUES
('iPhone', 999, 'Phone'),
('MacBook', 1999, 'Laptop'),
('iPad', 599, 'Tablet');
▶ مثال: إدراج استعلام فرعي
-- Insert from Query Results
INSERT INTO user_archive (id, name, email)
SELECT id, name, email FROM users WHERE status = 'deleted';
4. التحديث: تحديث البيانات
▶ مثال: التحديث المشروط
-- 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
-- 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: حذف البيانات
▶ مثال: الحذف المشروط
-- 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 | إعادة التعيين | عدم إعادة التعيين |
| أين | غير مدعوم | مدعوم |
-- Clear the table (Non-rollbackable)
TRUNCATE TABLE temp_data;
6. INSERT ON DUPLICATE KEY UPDATE
قم بتنفيذ التحديث في حالة وجود تعارض في المفتاح الأساسي أو المفتاح الفريد.
▶ مثال: عملية UPSERT
-- 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
-- Replace if it exists, insert if it doesn't
REPLACE INTO users (id, username, email)
VALUES (1, 'alice_updated', 'alice_new@email.com');
8. إرشادات السلامة
| الإجراء | التوصية |
|---|---|
| تحديث/حذف | يجب تضمين جملة WHERE؛ استخدم أولاً SELECT للتأكد من نطاق العملية |
| العمليات المجمعة | يتم تنفيذها على دفعات تتراوح كل منها بين 1,000 و5,000 صف |
| بيئة الإنتاج | بدء معاملة، ثم تنفيذ الأمر COMMIT بعد التأكيد |
| النسخ الاحتياطي | قبل العملية mysqldump النسخ الاحتياطي |
▶ مثال: عملية التحديث الأمني
-- 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 إدراج البيانات؛ يدعم الاستعلامات ذات الصف الواحد، والاستعلامات متعددة الصفوف، والاستعلامات الفرعية
- تحديث: لتحديث البيانات، يجب تضمين جملة WHERE
- DELETE تحذف البيانات؛ يجب أن تتضمن جملة WHERE
- TRUNCATE تُفرغ الجدول؛ وهي عملية سريعة ولكن لا يمكن التراجع عنها.
- INSERT ON DUPLICATE KEY UPDATE تُنفِّذ عملية UPSERT
- تحقق وتأكد قبل تنفيذ أي عمليات؛ استخدم ميزة حماية المعاملات في بيئة الإنتاج.
📝 تمارين
-
المشكلة الأساسية (مستوى الصعوبة ⭐): أدخل 5 سجلات اختبار في الجدول
users. -
مشكلة متقدمة (مستوى الصعوبة: ⭐⭐): قم بتنفيذ عداد الزيارات باستخدام
INSERT ON DUPLICATE KEY UPDATE. -
التحدي (مستوى الصعوبة: ⭐⭐⭐): اكتب برنامجًا لحذف البيانات المؤقتة التي يعود تاريخها إلى 30 يومًا مضت بشكل آمن، باستخدام ميزة حماية المعاملات.