DELETE لحذف صف أو أكثر من صفوف جدول قاعدة البيانات. من المهم جدًا توخي الحذر عند استخدام هذه التعليمة لأن حذف البيانات لا رجعة فيه في أغلب الأحيان (إلا إذا كنت تستخدم نظامًا لإدارة قواعد البيانات يدعم استعادة البيانات المحذوفة أو قمت بعمل نسخة احتياطية).الصيغة الأساسية لتعليمة DELETE:
DELETE FROM اسم_الجدولWHERE شرط;DELETE FROM: تحدد أنك تريد حذف بيانات من جدول.اسم_الجدول: اسم الجدول الذي تريد حذف البيانات منه.WHERE شرط: (اختياري) يحدد الشرط الذي يجب أن يتحقق في الصفوف المراد حذفها. إذا لم يتم استخدامWHERE، سيتم حذف جميع الصفوف من الجدول.
شرح مفصل:
- حذف جميع الصفوف من جدول:
إذا كنت تريد حذف جميع الصفوف في جدول ما، استخدم الصيغة التالية بدون شرط WHERE:
DELETE FROM اسم_الجدول;
مثال: لحذف جميع الصفوف من جدول اسمه Customers:
DELETE FROM Customers;
تحذير: هذا الأمر سيفرغ الجدول تمامًا، لذا استخدمه بحذر شديد.
- حذف صفوف محددة بشرط:
لحذف صفوف معينة تحقق شرطًا ما، استخدم عبارة WHERE لتحديد هذا الشرط.
مثال: لحذف الزبون الذي رقمه CustomerID يساوي 3:
DELETE FROM CustomersWHERE CustomerID = 3;أمثلة أخرى مع شروط مختلفة:
- حذف جميع الزبائن من مدينة "New York":
DELETE FROM CustomersWHERE City = 'New York';- حذف جميع المنتجات التي سعرها أقل من 10 دولارات:
DELETE FROM ProductsWHERE Price < 10;- حذف جميع الطلبات التي تمت قبل تاريخ معين:
DELETE FROM OrdersWHERE OrderDate < '2024-01-01';- الحذف المرتبط (Cascading Deletes) و المفاتيح الخارجية (Foreign Keys):
عند التعامل مع جداول مرتبطة بعلاقات (مثل علاقة "واحد لأكثر" باستخدام المفاتيح الخارجية)، قد تحتاج إلى مراعاة تأثير الحذف على الجداول المرتبطة. هناك خيارات تحدد سلوك الحذف عند وجود مفاتيح خارجية:
ON DELETE CASCADE: عند حذف سجل في الجدول "الأب"، سيتم حذف جميع السجلات المرتبطة به في الجدول "الابن" تلقائيًا.ON DELETE SET NULL: عند حذف سجل في الجدول "الأب"، سيتم تعيين قيمة المفتاح الخارجي في الجدول "الابن" إلىNULL.ON DELETE RESTRICT: يمنع حذف السجل في الجدول "الأب" إذا كان هناك سجلات مرتبطة به في الجدول "الابن". هذا هو السلوك الافتراضي في معظم أنظمة قواعد البيانات.
مثال: إذا كان لديك جدول Orders مرتبط بجدول Customers، وتريد حذف زبون مع جميع طلباته، يمكنك تعريف المفتاح الخارجي في جدول Orders كالتالي:
ALTER TABLE OrdersADD CONSTRAINT FK_CustomerOrderFOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)ON DELETE CASCADE;الآن، عند حذف زبون من جدول Customers، سيتم حذف جميع طلباته في جدول Orders تلقائيًا.
- TRUNCATE TABLE مقابل DELETE:
يوجد أمر آخر في SQL يُستخدم لحذف جميع الصفوف من جدول وهو TRUNCATE TABLE. الفرق الرئيسي بين TRUNCATE TABLE و DELETE بدون شرط WHERE هو:
TRUNCATE TABLEأسرع بكثير لأنه لا يسجل عمليات الحذف بشكل فردي.TRUNCATE TABLEيعيد تعيين أي قيم تلقائية الزيادة (auto-increment) إلى قيمتها الأولية.- لا يمكن استخدام
TRUNCATE TABLEمع الجداول التي لها مفاتيح خارجية تشير إليها (إلا إذا تم تعطيل هذه القيود مؤقتًا).
مثال:
TRUNCATE TABLE Customers;
ملخص:
تعليمة DELETE أداة قوية لحذف البيانات في SQL، لكن يجب استخدامها بحذر. من الضروري فهم الشروط وكيفية تأثيرها على البيانات، خاصة عند التعامل مع الجداول المرتبطة. إذا كنت تريد حذف جميع الصفوف بسرعة وإعادة تعيين قيم الزيادة التلقائية، فاستخدم TRUNCATE TABLE بدلاً من DELETE.
