1. المقدمة
يُستخدم MySQL في العديد من تطبيقات الويب وإدارة قواعد البيانات، وتحديث البيانات أمر بالغ الأهمية للعمليات اليومية وصيانة التطبيقات. على وجه الخصوص، بالنسبة للأنظمة التي تتعامل مع كميات كبيرة من البيانات أو عندما تحتاج عدة سجلات إلى التحديث في آن واحد، فإن الاستفادة من جملة UPDATE في MySQL لتعمل بكفاءة أمر ضروري.
تشرح هذه المقالة بالتفصيل كيفية تحديث سجلات وأعمدة متعددة دفعة واحدة باستخدام جملة UPDATE في MySQL. من الاستخدام البسيط إلى التحديثات الشرطية المعقدة، نقدمها بالترتيب لتكون مرجعًا مفيدًا لمن يرغب في تنفيذ عمليات تحديث معقدة باستخدام MySQL.
2. الصياغة الأساسية لجمل UPDATE
جملة UPDATE في MySQL هي صياغة لتحديث البيانات في جدول بناءً على شروط محددة. أولاً، لنلقِ نظرة على الصياغة الأساسية لجملة UPDATE وكيفية تحديث سجل أو عمود واحد.
الصياغة الأساسية
الصياغة الأساسية لجملة UPDATE في MySQL هي كما يلي.
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
- table_name : تحديد اسم الجدول الذي سيتم تحديثه.
- SET clause : تحديد الأعمدة التي سيتم تحديثها والقيم الجديدة لها. عند تحديث عدة أعمدة في آن واحد، يتم فصل أزواج العمود‑القيمة بفواصل.
- WHERE clause : تحديد الشرط للسجلات التي سيتم تحديثها. إذا تُرك الشرط، سيتم تحديث جميع السجلات في الجدول، لذا يجب الحذر.
مثال على تحديث سجل أو عمود واحد
كمثال أساسي على الاستخدام، لنرى كيف يتم تحديث سجل أو عمود واحد.
UPDATE users
SET name = 'Tanaka'
WHERE id = 1;
تقوم جملة SQL هذه بتحديث عمود name للسجل الذي يحمل id = 1 في جدول users إلى “Tanaka”. من خلال تحديد جملة WHERE، يمكنك تحديث السجل المحدد فقط.

3. تحديث دفعي لعدة سجلات
عند تحديث عدة سجلات دفعة واحدة، يمكنك تحديد عدة شروط في جملة WHERE. على سبيل المثال، يمكنك استخدام جملة IN أو OR لتحديد عدة شروط وتحديث السجلات بفعالية.
تحديث عدة سجلات باستخدام جملة IN
استخدام جملة IN يتيح لك تحديث السجلات التي تطابق قائمة محددة من القيم.
UPDATE users
SET status = 'active'
WHERE id IN (1, 3, 5, 7);
في جملة SQL هذه، داخل جدول users، يتم تحديث عمود status للسجلات التي يكون id فيها 1 أو 3 أو 5 أو 7 إلى ‘active’. يتيح لك استخدام جملة IN تحديث عدة سجلات دفعة واحدة تستوفي الشرط.
تحديد عدة شروط باستخدام جملة OR
جملة OR تسمح لك بدمج وتحديد عدة شروط.
UPDATE users
SET status = 'inactive'
WHERE id = 2 OR id = 4 OR id = 6;
في جملة SQL هذه، يتم تحديث عمود status للسجلات التي يكون id فيها 2 أو 4 أو 6 إلى ‘inactive’. يتيح لك استخدام جملة OR تحديث السجلات التي تطابق عدة شروط في آن واحد.
4. تحديث عدة أعمدة في آن واحد
في جمل UPDATE الخاصة بـ MySQL، يمكنك تحديث عدة أعمدة في الوقت نفسه. هذا مفيد عندما تحتاج إلى تغيير عدة معلومات مرة واحدة مع الحفاظ على اتساق البيانات.
مثال على تحديث عدة أعمدة
عند تحديث عدة أعمدة في آن واحد، حدد أسماء الأعمدة والقيم في جملة SET، مفصولة بفواصل.
UPDATE products
SET price = price * 1.1, stock = stock - 1
WHERE id = 10;
في جملة SQL هذه، للسجل في جدول products حيث id = 10، يتم زيادة عمود price بنسبة 10% وتقليل عمود stock بمقدار 1. من خلال تحديد عدة أعمدة في جملة SET، يمكنك تحديث عدة معلومات بفعالية.
5. التحديث الشرطي باستخدام جمل CASE
في جمل UPDATE الخاصة بـ MySQL، يمكنك استخدام تعبيرات CASE لتعيين قيم مختلفة بناءً على شروط. يتيح لك ذلك تعديل محتوى التحديث بمرونة وفقًا لعدة شروط، مما يجعل عمليات التحديث المعقدة سهلة التنفيذ.
الصياغة الأساسية باستخدام تعبيرات CASE
الصيغة الأساسية لتعبير UPDATE باستخدام تعبير CASE هي كما يلي.
UPDATE table_name
SET column_name = CASE
WHEN condition1 THEN value1
WHEN condition2 THEN value2
...
ELSE default_value
END
WHERE condition;
- اسم العمود : يحدد العمود الذي تريد تحديثه.
- الشرط : حدد الشرط في جملة WHEN، وضع القيمة التي سيتم تطبيقها في جملة THEN عندما يتطابق.
- القيمة الافتراضية : القيمة التي تُعيّن عندما لا يتطابق أي من الشروط (اختياري).
مثال عملي باستخدام CASE
هنا، دعنا نلقي نظرة على مثال يحدّث الرواتب في جدول employees بناءً على المسمى الوظيفي.
UPDATE employees
SET salary = CASE
WHEN position = 'Manager' THEN salary * 1.1
WHEN position = 'Developer' THEN salary * 1.05
WHEN position = 'Intern' THEN salary * 1.02
ELSE salary
END;
في هذا البيان SQL، لكل سجل في جدول employees، يتم تحديث عمود salary وفقًا لقيمة عمود position.
تحديث شرطي لعدة أعمدة
يمكن أيضًا تطبيق تعبيرات CASE على عدة أعمدة. في المثال أدناه، يتم تحديث عمودي salary و bonus في جدول employees بقيم مختلفة بناءً على المسمى الوظيفي وسنوات الخدمة.
UPDATE employees
SET
salary = CASE
WHEN position = 'Manager' AND years_of_service >= 5 THEN salary * 1.15
WHEN position = 'Developer' AND years_of_service >= 3 THEN salary * 1.1
ELSE salary
END,
bonus = CASE
WHEN position = 'Manager' THEN bonus + 1000
WHEN position = 'Developer' THEN bonus + 500
ELSE bonus
END;
في هذا البيان SQL، يتم تحديث الرواتب والمكافآت شرطياً مرة واحدة بناءً على المسمى الوظيفي وسنوات الخدمة. يتيح استخدام تعبيرات CASE تحديثات مرنة بناءً على عدة شروط.

6. تحديث جداول متعددة باستخدام JOIN
في MySQL، يمكنك استخدام جملة JOIN لدمج جداول متعددة وتحديث السجلات بناءً على شروط محددة. يتيح لك ذلك الإشارة إلى بيانات من جداول مختلفة أثناء تحديث جدول واحد، مما يسمح بمعالجة بيانات معقدة.
الصيغة الأساسية لتعبيرات UPDATE باستخدام JOIN
عند تحديث جداول متعددة باستخدام JOIN، الصيغة الأساسية هي كما يلي.
UPDATE tableA
JOIN tableB ON tableA.column = tableB.column
SET tableA.updated_column = new_value
WHERE condition;
- الجدول A والجدول B : حدد جدول الهدف للتحديث (الجدول A) والجدول المرجعي (الجدول B).
- جملة ON : حدد شرط الـ JOIN وعرّف العمود الذي سيتم ربط الجداول بناءً عليه.
- جملة SET : حدد العمود الذي سيتم تحديثه وقيمته الجديدة.
- جملة WHERE : حدد شرط التحديث، لتحديث السجلات المتطابقة فقط.
مثال عملي باستخدام JOIN
على سبيل المثال، دعنا نلقي نظرة على مثال يدمج جدول orders مع جدول customers لتحديث حالة الطلبات المتعلقة بعميل معين.
UPDATE orders
JOIN customers ON orders.customer_id = customers.id
SET orders.status = 'Shipped'
WHERE customers.vip_status = 'Yes';
في هذا البيان SQL، يتم تحديث عمود status في جدول orders للسجلات المتعلقة بالعملاء الذين تكون قيمة vip_status في جدول customers لديهم “Yes” إلى “Shipped”. باستخدام جملة JOIN، يمكنك التحديث بناءً على معلومات من جداول أخرى.
تحديث JOIN مع عدة شروط
يمكنك دمج عدة شروط لتحديد معايير أكثر تفصيلاً. في المثال أدناه، يتم تغيير حالة الطلبات المتعلقة بعميل معين بشكل جماعي بناءً على الشروط.
UPDATE orders
JOIN customers ON orders.customer_id = customers.id
SET orders.status = CASE
WHEN customers.vip_status = 'Yes' THEN 'Priority'
WHEN customers.vip_status = 'No' AND orders.amount > 10000 THEN 'Review'
ELSE orders.status
END
WHERE orders.date >= '2024-01-01';
من خلال الاستفادة من JOIN، يمكنك إجراء تحديثات بيانات مرنة تتكيف مع الشروط.
7. الأداء والاعتبارات
عند استخدام عبارات MySQL UPDATE لتعديل عدة صفوف أو أعمدة دفعة واحدة، خاصةً مع مجموعات بيانات كبيرة، يجب مراعاة الأداء. فيما يلي النقاط الرئيسية والتحذيرات التي يجب أن تعرفها لتحسين أداء التحديث والحفاظ على سلامة البيانات.
نصائح تحسين الأداء
الاستفادة من الفهارس
عند تحديث السجلات بناءً على شروط محددة باستخدام جملة WHERE، فإن إضافة فهرس إلى الأعمدة ذات الصلة يحسن سرعة البحث. الفهارس تعزز أداء الاستعلام، مما يسمح بمعالجة فعّالة حتى عندما يستهدف التحديث حجمًا كبيرًا من البيانات.
CREATE INDEX idx_customer_id ON orders(customer_id);
ومع ذلك، وجود عدد كبير جدًا من الفهارس قد يضعف الأداء فعليًا، لذا يُنصح بفهرسة الأعمدة الضرورية فقط.
تقليل الحمل باستخدام المعالجة الدفعية
تحديث عدد كبير من الصفوف مرة واحدة يمكن أن يضع حملًا ثقيلًا على خادم قاعدة البيانات ويبطئ أوقات الاستجابة. بالنسبة للتحديثات الضخمة، يمكن أن يقلل استخدام المعالجة الدفعية (تنفيذ العملية على عدة مرور) من الحمل على الخادم.
UPDATE orders
SET status = 'Processed'
WHERE status = 'Pending'
LIMIT 1000;
من خلال دمج ذلك مع سكريبت، يمكنك تشغيل تحديثات دفعية متكررة لتعديل البيانات بكفاءة.
استخدام المعاملات
عندما تكون عدة عبارات UPDATE مرتبطة أو تكون سلامة البيانات أمرًا حيويًا، فإن استخدام معاملة يضمن التناسق. مع المعاملة، أي خطأ يحدث أثناء التحديث يمكن أن يُعيد جميع التغييرات إلى الحالة السابقة.
START TRANSACTION;
UPDATE accounts SET balance = balance - 500 WHERE id = 1;
UPDATE accounts SET balance = balance + 500 WHERE id = 2;
COMMIT;
إدارة الأقفال
تنفيذ UPDATE قد يتسبب في أقفال الجداول. هذا مهم بشكل خاص عندما يصل عدة مستخدمين إلى نفس الجدول في وقت واحد. على سبيل المثال، استخدام أقفال على مستوى الصف يسمح للمستخدمين الآخرين بالعمل على صفوف مختلفة في آنٍ واحد، مما يتيح المعالجة المتوازية. تجنّب أقفال الجداول الكاملة يحسن استجابة قاعدة البيانات. 
8. الخلاصة
في هذه المقالة، قدمنا شرحًا مفصلاً لطرق فعّالة لتحديث عدة سجلات وأعمدة باستخدام عبارة UPDATE في MySQL، شاملةً كل شيء من الاستخدام الأساسي إلى التقنيات المتقدمة. عند تحديث عدة قطع من البيانات في MySQL، تحتاج إلى مراعاة حجم البيانات، سرعة المعالجة، وسلامة البيانات.
مراجعة النقاط الرئيسية
- أساسيات عبارات UPDATE
- فهم الصياغة الأساسية لعبارة UPDATE يتيح لك تحديث الأعمدة أو السجلات الفردية بأمان.
- التحديث الجماعي لعدة سجلات
- أظهرنا كيفية تحديث عدة سجلات تلبي شروطًا محددة بكفاءة باستخدام عبارات WHERE و IN و OR.
- التحديث المتزامن لعدة أعمدة
- باستخدام جملة SET، يمكنك تحديث عدة أعمدة داخل السجل نفسه مرة واحدة، مما يتيح تحديثات فعّالة مع الحفاظ على تناسق البيانات.
- التحديثات الشرطية باستخدام عبارات CASE
- الاستفادة من عبارات CASE تتيح لك إجراء تحديثات مختلفة في عملية واحدة بناءً على الشروط، مما يبسط منطق التحديث المعقد.
- تحديث عدة جداول باستخدام JOIN
- بالإشارة إلى بيانات من جداول أخرى أثناء تحديث سجلات محددة، يمكنك تحسين سلامة قاعدة البيانات ككل.
- الأداء والاعتبارات
- تعلمنا كيفية إجراء تحديثات بيانات فعّالة وآمنة من خلال الاستفادة من الفهارس، المعالجة الدفعية، والمعاملات. كما يجب الانتباه إلى إدارة الأقفال لتحسين أداء قاعدة البيانات.
الخاتمة
تحديث البيانات بفعالية في MySQL مهارة مهمة جدًا في إدارة قواعد البيانات. إتقان عبارة UPDATE يمكن أن يعزز كفاءة العمليات ويُحسّن الأداء العام للنظام. احرص على تطبيق التقنيات المقدمة في هذه المقالة على مهامك ومشاريعك الواقعية.

