في لغة SQL، تُستخدم تعليمة DELETE لحذف صف أو أكثر من صفوف جدول قاعدة البيانات. من المهم جدًا توخي الحذر عند استخدام هذه التعليمة لأن حذف البيانات لا رجعة فيه في أغلب الأحيان (إلا إذا كنت تستخدم نظامًا لإدارة قواعد البيانات يدعم استعادة البيانات المحذوفة أو قمت بعمل نسخة احتياطية).

الصيغة الأساسية لتعليمة DELETE:

SQL
DELETE FROM اسم_الجدول
WHERE شرط;
  • DELETE FROM: تحدد أنك تريد حذف بيانات من جدول.
  • اسم_الجدول: اسم الجدول الذي تريد حذف البيانات منه.
  • WHERE شرط: (اختياري) يحدد الشرط الذي يجب أن يتحقق في الصفوف المراد حذفها. إذا لم يتم استخدام WHERE، سيتم حذف جميع الصفوف من الجدول.

شرح مفصل:

  1. حذف جميع الصفوف من جدول:

إذا كنت تريد حذف جميع الصفوف في جدول ما، استخدم الصيغة التالية بدون شرط WHERE:

SQL
DELETE FROM اسم_الجدول;

مثال: لحذف جميع الصفوف من جدول اسمه Customers:

SQL
DELETE FROM Customers;

تحذير: هذا الأمر سيفرغ الجدول تمامًا، لذا استخدمه بحذر شديد.

  1. حذف صفوف محددة بشرط:

لحذف صفوف معينة تحقق شرطًا ما، استخدم عبارة WHERE لتحديد هذا الشرط.

مثال: لحذف الزبون الذي رقمه CustomerID يساوي 3:

SQL
DELETE FROM Customers
WHERE CustomerID = 3;

أمثلة أخرى مع شروط مختلفة:

  • حذف جميع الزبائن من مدينة "New York":
SQL
DELETE FROM Customers
WHERE City = 'New York';
  • حذف جميع المنتجات التي سعرها أقل من 10 دولارات:
SQL
DELETE FROM Products
WHERE Price < 10;
  • حذف جميع الطلبات التي تمت قبل تاريخ معين:
SQL
DELETE FROM Orders
WHERE OrderDate < '2024-01-01';
  1. الحذف المرتبط (Cascading Deletes) و المفاتيح الخارجية (Foreign Keys):

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

  • ON DELETE CASCADE: عند حذف سجل في الجدول "الأب"، سيتم حذف جميع السجلات المرتبطة به في الجدول "الابن" تلقائيًا.
  • ON DELETE SET NULL: عند حذف سجل في الجدول "الأب"، سيتم تعيين قيمة المفتاح الخارجي في الجدول "الابن" إلى NULL.
  • ON DELETE RESTRICT: يمنع حذف السجل في الجدول "الأب" إذا كان هناك سجلات مرتبطة به في الجدول "الابن". هذا هو السلوك الافتراضي في معظم أنظمة قواعد البيانات.

مثال: إذا كان لديك جدول Orders مرتبط بجدول Customers، وتريد حذف زبون مع جميع طلباته، يمكنك تعريف المفتاح الخارجي في جدول Orders كالتالي:

SQL
ALTER TABLE Orders
ADD CONSTRAINT FK_CustomerOrder
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
ON DELETE CASCADE;

الآن، عند حذف زبون من جدول Customers، سيتم حذف جميع طلباته في جدول Orders تلقائيًا.

  1. TRUNCATE TABLE مقابل DELETE:

يوجد أمر آخر في SQL يُستخدم لحذف جميع الصفوف من جدول وهو TRUNCATE TABLE. الفرق الرئيسي بين TRUNCATE TABLE و DELETE بدون شرط WHERE هو:

  • TRUNCATE TABLE أسرع بكثير لأنه لا يسجل عمليات الحذف بشكل فردي.
  • TRUNCATE TABLE يعيد تعيين أي قيم تلقائية الزيادة (auto-increment) إلى قيمتها الأولية.
  • لا يمكن استخدام TRUNCATE TABLE مع الجداول التي لها مفاتيح خارجية تشير إليها (إلا إذا تم تعطيل هذه القيود مؤقتًا).

مثال:

SQL
TRUNCATE TABLE Customers;

ملخص:

تعليمة DELETE أداة قوية لحذف البيانات في SQL، لكن يجب استخدامها بحذر. من الضروري فهم الشروط وكيفية تأثيرها على البيانات، خاصة عند التعامل مع الجداول المرتبطة. إذا كنت تريد حذف جميع الصفوف بسرعة وإعادة تعيين قيم الزيادة التلقائية، فاستخدم TRUNCATE TABLE بدلاً من DELETE.