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
.