تحديث الجداول في SQL


أهلاً بك يا بطل! اليوم راح نتكلم عن واحد من أهم الأوامر في SQL وهو أمر UPDATE. هذا الأمر هو اللي بيخليك تعدّل البيانات الموجودة داخل جداولك. يعني لو عندك غلط في اسم، رقم، تاريخ، أو أي شي، UPDATE هو الحل!

بنية الأمر UPDATE الأساسية

بشكل عام، أمر UPDATE يتكون من ثلاث أجزاء رئيسية:

  • UPDATE: تحدد اسم الجدول اللي تبي تعدّل فيه.
  • SET: تحدد العمود (أو الأعمدة) اللي تبي تعدّلها والقيمة الجديدة لها.
  • WHERE: (اختياري لكن مهم جداً جداً جداً!) تحدد الصفوف اللي تبي تعدّلها. لو ما حطيت WHERE، راح يعدّل كل الصفوف في الجدول! وهذي كارثة!

شوف كيف شكلها:

UPDATE اسم_الجدول
SET العمود_الأول = قيمة_جديدة_1, العمود_الثاني = قيمة_جديدة_2, ...
WHERE شرط_تحديد_الصفوف;

مثال بسيط: لو عندك جدول Students وتبي تعدّل اسم طالب واحد:

UPDATE Students
SET FirstName = 'أحمد', LastName = 'المحمد'
WHERE StudentID = 101;

هنا، احنا بنقول للنظام: "في جدول Students، غيّر لي اسم الطالب الأول لـ 'أحمد' واسمه الأخير لـ 'المحمد' بس للطالب اللي رقمه التعريفي StudentID هو 101."

تحديث عدة أعمدة في نفس الوقت

زي ما شفت في المثال اللي فوق، تقدر تعدّل أكثر من عمود في نفس الأمر. بس تفصل بينهم بفاصلة , بعد كلمة SET.

مثال: تحديث معلومات طالب معين (اسمه، عمره، وتخصصه):

UPDATE Students
SET FirstName = 'سارة',
    Age = 22,
    Major = 'علوم الحاسب'
WHERE StudentID = 102;

التحديث الشرطي: استخدام WHERE

ركز معي هنا! الـ WHERE هو صديقك الصدوق وهو اللي بيحميك من كوارث لا تحمد عقباها. تخيل لو نسيت تحط WHERE في المثال اللي فوق؟ كان كل الطلاب اللي في جدولك بيصير اسمهم 'سارة' وعمرهم 22 وتخصصهم 'علوم الحاسب'! يا ساتر!

تقدر تستخدم أي شرط منطقي في WHERE زي اللي تستخدمه في SELECT:

  • المقارنة: =, >, <, >=, <=, <> (لا يساوي)
  • المدى: BETWEEN
  • القائمة: IN
  • النمط: LIKE
  • الدمج: AND, OR, NOT

مثال: زيادة رواتب الموظفين اللي تخصصهم 'تسويق' بنسبة 10%:

UPDATE Employees
SET Salary = Salary * 1.10
WHERE Department = 'تسويق';

التحديث باستخدام العمليات الحسابية

مو لازم تحط قيمة ثابتة بعد SET. تقدر تسوي عمليات حسابية على القيم الموجودة أصلاً في العمود. زي المثال اللي فوق، زدنا الراتب بنسبة مئوية.

مثال آخر: تخفيض الكمية المتوفرة لمنتج معين بعد عملية بيع:

UPDATE Products
SET StockQuantity = StockQuantity - 5
WHERE ProductID = 505;

هنا نقصنا 5 من الكمية المتوفرة للمنتج اللي رقمه 505.

التحديث بناءً على بيانات من جدول آخر

أحياناً تحتاج تعدّل بيانات في جدول بناءً على معلومات موجودة في جدول ثاني. هذي تصير كثير! تقدر تسويها باستخدام JOIN أو SUBQUERY (استعلام فرعي). خلونا نشوف مثال باستخدام JOIN، لأنه شائع وفعّال.

تخيل عندك جدول Orders فيه رقم طلب واسم عميل، وجدول Customers فيه رقم العميل واسمه الحقيقي. تبي تحدث اسم العميل في جدول Orders ليطابق الاسم في جدول Customers إذا كان الاسم مختلف (ممكن يكون فيه أخطاء إدخال قديمة).

-- هذا المثال يختلف قليلاً باختلاف قاعدة البيانات (MySQL, SQL Server, PostgreSQL, Oracle)
-- هذا مثال عام لـ SQL Server أو MySQL
UPDATE O
SET O.CustomerName = C.CustomerName
FROM Orders O
JOIN Customers C ON O.CustomerID = C.CustomerID
WHERE O.CustomerName <> C.CustomerName;

-- مثال لـ PostgreSQL أو Oracle (باستخدام FROM في UPDATE)
-- UPDATE Orders O
-- SET CustomerName = C.CustomerName
-- FROM Customers C
-- WHERE O.CustomerID = C.CustomerID
-- AND O.CustomerName <> C.CustomerName;

في هذا المثال، احنا بنحدّث جدول Orders (اللي سميناه O اختصاراً) باستخدام بيانات من جدول Customers (اللي سميناه C). الشرط هو إننا نربط الجدولين برقم العميل CustomerID، ونحدّث فقط إذا كان اسم العميل مختلف.

تنبيهات هامة جداً قبل التحديث!

1. دائماً استخدم WHERE: لا تكتب أمر UPDATE بدون WHERE إلا إذا كنت متأكد 1000% إنك تبي تعدّل كل الصفوف في الجدول. خطأ واحد هنا ممكن يمسح أو يخرب بيانات مهمة جداً.

2. خذ نسخة احتياطية: قبل ما تسوي أي عملية تحديث كبيرة أو معقدة، خصوصاً في بيئة الإنتاج (Production)، خذ نسخة احتياطية من الجدول أو قاعدة البيانات. السلامة أولاً!

3. جرب في بيئة تطوير: دائماً اختبر أوامر UPDATE على بيئة تطوير (Development Environment) أو نسخة من البيانات قبل تطبيقها على البيانات الحقيقية.

4. استخدم المعاملات (Transactions): في العمليات الحرجة، استخدم BEGIN TRANSACTION و COMMIT أو ROLLBACK. هذا بيسمح لك تتراجع عن التغييرات لو صار خطأ. مثال:

BEGIN TRANSACTION;

    UPDATE Products
    SET Price = Price * 1.05
    WHERE Category = 'Electronics';

    -- هنا ممكن تسوي SELECT عشان تتأكد من التغييرات

    -- لو كل شي تمام، ثبت التغييرات
    -- COMMIT;

    -- لو صار خطأ أو تراجعت عن قرارك، الغي التغييرات
    -- ROLLBACK;

وبكذا نكون غطينا أساسيات تحديث الجداول في SQL. الأمر بسيط لكن قوته تكمن في طريقة استخدامه الصحيحة والآمنة. بالتوفيق!