0Pricing
SQL Academy · درس

DELETE مع USING وأنماط آمنة

احذف الصفوف المرتبطة بجداول أخرى باستخدام DELETE ... USING، واستخدم المعاملات ثم SELECT أولًا للتحقق قبل العمليات المدمرة.

DELETE مع USING وأنماط آمنة درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Academy 4 دروس في المجموع.

DELETE أساسي

أزل الصفوف المطابقة:

DELETE FROM users WHERE id = 1;

اختبر دائمًا باستخدام SELECT أولًا

قبل تنفيذ أي DELETE، نفّذ شرط WHERE نفسه مع SELECT للتأكد من عدد الصفوف:

SELECT COUNT(*) FROM orders
WHERE status = 'cancelled' AND created_at < NOW() - INTERVAL '1 year';

DELETE داخل معاملة

غلّف العمليات المدمرة داخل معاملة حتى تتمكن من تنفيذ ROLLBACK:

BEGIN;
DELETE FROM orders WHERE status = 'cancelled' AND ...;
SELECT COUNT(*) FROM orders;       -- sanity check
-- COMMIT;  or ROLLBACK;

DELETE من دون WHERE كارثة

تفرغ DELETE FROM users; الجدول. لا يوجد زر تراجع. تحلَّ بأقصى درجات الحذر؛ فالثانية الإضافية اللازمة لكتابة WHERE تُعد وسيلة حماية زهيدة التكلفة.

DELETE … USING (حذف بأسلوب JOIN في PostgreSQL)

احذف الصفوف من جدول واحد استنادًا إلى جدول آخر:

DELETE FROM orders o
USING users u
WHERE u.id = o.user_id
  AND u.is_banned = true;

DELETE مع استعلام فرعي

البديل وفقًا للمعيار:

DELETE FROM orders
WHERE user_id IN (SELECT id FROM users WHERE is_banned);

تتابعات المفاتيح الخارجية

إذا كان orders.user_id يتضمن ON DELETE CASCADE، فإن حذف مستخدم يحذف طلباته تلقائيًا. هذا مريح لكنه خطير، فاستخدمه باعتدال.

ALTER TABLE orders
  ADD CONSTRAINT orders_user_fk
  FOREIGN KEY (user_id) REFERENCES users(id)
  ON DELETE CASCADE;

الحذف المنطقي

لا تحذف تطبيقات كثيرة الصفوف فعليًا، بل تضبط طابعًا زمنيًا في deleted_at:

UPDATE users SET deleted_at = NOW() WHERE id = $1;

-- Every query then has:
WHERE deleted_at IS NULL

تنظيف البيانات القديمة

لتنظيف الجداول الكبيرة دوريًا، احذف البيانات على دفعات لتجنب المعاملات طويلة التشغيل:

DELETE FROM events
WHERE id IN (
  SELECT id FROM events
  WHERE created_at < NOW() - INTERVAL '90 days'
  LIMIT 10000
);
-- run this in a loop until it returns 0 rows

TRUNCATE: عندما تكون السرعة مهمة

إذا كنت تريد فعلًا إفراغ جدول، فإن TRUNCATE أسرع من DELETE لأنه لا يفحص الصفوف. لكنه لا يطلق مشغلات ROW، ولا يمكن التراجع عنه في جميع الإعدادات:

TRUNCATE TABLE staging_orders;
TRUNCATE TABLE staging_orders RESTART IDENTITY CASCADE;

استرجاع الصفوف المحذوفة باستخدام RETURNING

استرجع الصفوف المحذوفة، وهو أمر مفيد للأرشفة:

WITH deleted AS (
  DELETE FROM orders WHERE status = 'archived' RETURNING *
)
INSERT INTO orders_archive SELECT * FROM deleted;

مراجعة

يُعد DELETE أخطر العبارات. وتشمل الأنماط الوقائية ما يلي:

  • نفّذ SELECT أولًا
  • استخدم BEGIN; ... ; ROLLBACK كتشغيل تجريبي
  • نفّذ عمليات الحذف الكبيرة على دفعات
  • فضّل الحذف المنطقي للبيانات الظاهرة للمستخدم
  • استخدم TRUNCATE على جداول التجهيز فقط

اختبار سريع

لقد نفّذت DELETE FROM users; من دون WHERE. ماذا تفعل؟

الأسئلة الشائعة

هل درس «DELETE مع USING وأنماط آمنة» مجاني؟

نعم — نص درس «DELETE مع USING وأنماط آمنة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.

ماذا ستتعلم في «DELETE مع USING وأنماط آمنة»؟

احذف الصفوف المرتبطة بجداول أخرى باستخدام DELETE ... USING، واستخدم المعاملات ثم SELECT أولًا للتحقق قبل العمليات المدمرة. تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟

لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «DELETE مع USING وأنماط آمنة»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟

نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. INSERT مع صفوف متعددة
  2. UPSERT: ON CONFLICT DO UPDATE (PostgreSQL)
  3. UPDATE مع FROM وتحديثات بأسلوب JOIN
  4. DELETE مع USING وأنماط آمنة
← العودة إلى SQL Academy