الدرس 22: حذف البيانات (DELETE مقابل TRUNCATE)
نغطي طريقتين رئيسيتين لإزالة البيانات من الجداول، كلاهما من DML (DELETE) و DDL (TRUNCATE).
1. DELETE Statement (DML)
تزيل DELETE الصفوف من جدول بناءً على شرط WHERE. مثل UPDATE، يؤدي حذف WHERE إلى إزالة جميع الصفوف، ولكنه أبطأ من TRUNCATE لأنه يسجل كل عملية حذف (مما يسمح بالتراجع).
بناء الجملة
sql DELETE FROM [table_name] WHERE [condition];
مثال: حذف الحسابات غير النشطة
إزالة جميع العملاء الذين لم يقدموا طلبًا منذ عام 2020.
sql DELETE FROM Customers WHERE LastOrderDate < '2020-01-01';
2. TRUNCATE TABLE (DDL)
تزيل TRUNCATE TABLE جميع الصفوف من جدول بسرعة وتعيد تعيين أي عدادات تتزايد تلقائيًا. إنها أسرع بكثير من DELETE لأنها تتعامل مع البيانات في أجزاء أكبر، ولكنها عادةً لا يمكن التراجع عنها (Rollback).
TRUNCATEهو أمر DDL لأنه يغير حالة هيكل الجدول (تتم إعادة تعيين العداد).
بناء الجملة
sql TRUNCATE TABLE [table_name];
الاختلافات الرئيسية
| الميزة | DELETE | TRUNCATE |
|---|---|---|
| السرعة | أبطأ (تسجل صفًا بصف) | أسرع بكثير (تلغي تخصيص التخزين) |
| عبارة WHERE | نعم، تسمح بالتصفية | لا، تزيل كل شيء |
| التراجع (Rollback) | نعم (بشكل عام) | لا (بشكل عام، حسب نظام DBMS) |
| إعادة تعيين عداد PK | لا | نعم |
| النوع | DML | DDL |
تحذير: استخدم
TRUNCATEبحذر شديد، حيث تختفي البيانات عادةً بشكل دائم.