PostgreSQL حذف الصفوف من التحديد

⚡ ملخص ذكي

PostgreSQL تقوم عملية الحذف (DELETE) بإزالة صف واحد أو أكثر من الجدول، وربطها بعبارة WHERE يستهدف فقط السجلات التي تطابق شرطًا معينًا، بينما يؤدي حذف عبارة WHERE إلى مسح كل صف في الجدول.

  • 📋 بناء الجملة: يقوم الأمر DELETE FROM table WHERE بحذف الصفوف المطابقة، ويمكن للأمر RETURNING أن يعيد عرض البيانات المحذوفة.
  • 🎯 شرط واحد: تقوم عبارة WHERE واحدة بحذف الصفوف التي تستوفي شرطًا واحدًا فقط.
  • ➕ شرطان: يؤدي دمج اختبارين باستخدام "و" إلى تضييق نطاق الحذف ليقتصر على صفوف محددة.
  • 🔗 بند الوجود: يقوم الأمر EXISTS بحذف الصفوف في جدول واحد بناءً على السجلات المطابقة في جدول آخر.
  • 🖥️ pgAdmin: يتم تشغيل استعلامات الحذف نفسها بشكل مرئي من خلال محرر استعلامات pgAdmin.
  • 🤖 سلامة الذكاء الاصطناعي: يقوم مساعدو الذكاء الاصطناعي بإضافة شرط WHERE الصحيح والتحذير قبل حذف الجدول بالكامل.

PostgreSQL حذف الصفوف من القائمة المحددة

حذف الاستعلام في PostgreSQL

استخدم بيان الحذف in PostgreSQL تُستخدم هذه الأداة لحذف سجل واحد أو أكثر من جدول. لحذف صفوف محددة فقط من جدول، PostgreSQL يسمح لك بدمج عبارة DELETE مع عبارة WHERE؛ وإلا فإنه يحذف جميع السجلات في الجدول.

PostgreSQL حذف صيغة الاستعلام

يمكن تعريف عبارة الحذف باستخدام الصيغة التالية:

[ WITH [ RECURSIVE ] with-query [, ...] ]
DELETE FROM [ ONLY ] table-name [ * ] [ [ AS ] alias ]
    [ USING using-list ]
    [ WHERE condition(s) | WHERE CURRENT OF cursor-name]
    [ RETURNING * | output-expression [ [ AS ] output-name] [, ...] ]

المعاملات

تتوفر المعايير التالية:

  • مع الاستعلام: تسمح لك عبارة WITH بالإشارة إلى استعلام فرعي واحد أو أكثر بالاسم داخل استعلام DELETE.
  • اسم الطاولة: اسم الجدول الذي سيتم حذف السجلات منه.
  • الاسم المستعار: بديل لاسم الجدول المستهدف.
  • قائمة المستخدمين: تعبيرات الجدول التي تسمح باستخدام الأعمدة من جداول أخرى في عبارة WHERE.
  • شروط)هذا القسم اختياري. هذه هي الشروط التي يجب استيفاؤها لحذف السجلات. في حال عدم تحديد هذا القسم، سيتم حذف جميع سجلات اسم الجدول.
  • اسم المؤشرالمؤشر الذي سيتم استخدامه في شرط WHERE CURRENT OF. سيتم حذف آخر صف تم جلبه بواسطة هذا المؤشر.
  • تعبير الإخراج: التعبير الذي سيتم معالجته وإعادته بواسطة عبارة DELETE بعد حذف كل صف.
  • اسم الإخراج: الاسم الذي سيتم استخدامه للعمود الذي تم إرجاعه.

لاحظ أنه بما أن عبارة DELETE تحذف الصف بأكمله، فلا داعي لتحديد أسماء الأعمدة.

PostgreSQL حذف الاستعلام بشرط واحد

يمكن استخدام عبارة DELETE مع شرط واحد، يتم تحديده باستخدام عبارة WHERE. لنفترض جدول الأسعار الذي يحتوي على البيانات التالية:

السعر:

PostgreSQL حذف الاستعلام بشرط واحد

دعونا نحذف السجل بمعرف 4:

DELETE FROM Price
WHERE id = 4;

يحذف الأمر أعلاه السجلات التي يكون فيها المعرّف 4. دعونا نتأكد مما إذا كان الحذف قد تم بنجاح:

PostgreSQL حذف الاستعلام بشرط واحد

تم حذف الصف ذو المعرف 4.

حذف الاستعلام بشرطين

استخدم PostgreSQL يمكن أن تأخذ عبارة DELETE شرطين. يجب ربط الشرطين باستخدام عامل الربط AND. سنستخدم الجدول التالي:

السعر:

PostgreSQL حذف الاستعلام بشرطين

خذ بعين الاعتبار المثال الموضح أدناه:

DELETE FROM Price
WHERE id = 3
AND price = 300;

في الأمر أعلاه، نقوم بحذف الصف الذي يكون فيه المعرّف 3 والسعر 300. يمكننا الآن الاستعلام عن الجدول:

SELECT * FROM Price;

هذا يعيد ما يلي:

PostgreSQL حذف الاستعلام بشرطين

تم حذف السجل ذو المعرف 3 والسعر 300.

PostgreSQL حذف الاستعلام باستخدام شرط EXISTS

مع المشرقية في بعض الحالات، يمكنك جعل عملية الحذف أكثر تعقيدًا. قد تكون هناك حاجة أحيانًا لحذف سجلات من جدول ما بناءً على سجلات من جدول آخر.

لأن عبارة FROM لا تسمح لك بعرض سجلات من أكثر من جدول واحد عند حذف سجل، تصبح عبارة EXISTS مفيدة للغاية. لدينا الجدولان التاليان:

كتاب:

PostgreSQL حذف الاستعلام باستخدام شرط EXISTS

السعر:

PostgreSQL حذف الاستعلام باستخدام شرط EXISTS

يمكننا بعد ذلك تشغيل الاستعلام التالي:

DELETE FROM Book
WHERE EXISTS
  (SELECT 1
    FROM Price
    WHERE Price.id = Book.id
    AND price < 250 );

يقوم الأمر بحذف الصفوف من جدول الكتب التي لها معرف مطابق في جدول الأسعار بسعر أقل من 250.

أصبح جدول الكتب الآن على النحو التالي:

PostgreSQL حذف الاستعلام باستخدام شرط EXISTS

تم حذف السجل ذو المعرف 1.

كيفية حذف صف في PostgreSQL باستخدام pgAdmin

يمكن أيضًا تشغيل استعلامات الحذف نفسها بصريًا من خلال واجهة pgAdmin، باتباع الخطوات التالية:

بشرط واحد

الخطوة 1) قم بتسجيل الدخول إلى حسابك في pgAdmin. افتح pgAdmin وقم بتسجيل الدخول إلى حسابك باستخدام بيانات اعتمادك.

الخطوة 2) أنشئ قاعدة بيانات تجريبية.

  1. من شريط التنقل الموجود على اليسار، انقر فوق قواعد البيانات.
  2. انقر فوق العرض التوضيحي.

حذف الصف في PostgreSQL باستخدام pgAdmin

الخطوة 3) اكتب الاستعلام أدناه في محرر الاستعلام:

DELETE FROM Price
WHERE id = 4;

الخطوة 4) انقر فوق الزر "تنفيذ".

حذف الصف في PostgreSQL باستخدام pgAdmin

الخطوة 5) دعونا نتحقق مما إذا تم حذف الصف:

حذف الصف في PostgreSQL باستخدام pgAdmin

بشرطين

الخطوة 1) قم بتسجيل الدخول إلى حساب pgAdmin الخاص بك.

الخطوة 2)

  1. من شريط التنقل الموجود على اليسار، انقر فوق قواعد البيانات.
  2. انقر فوق العرض التوضيحي.

حذف الصف في PostgreSQL باستخدام pgAdmin

الخطوة 3) اكتب الاستعلام في محرر الاستعلام:

DELETE FROM Price
WHERE id = 3
AND price = 300;

الخطوة 4) انقر فوق الزر "تنفيذ".

حذف الصف في PostgreSQL باستخدام pgAdmin

الخطوة 5) دعونا نتحقق مما إذا كان الحذف ناجحًا:

حذف الصف في PostgreSQL باستخدام pgAdmin

استخدام حالة موجود

الخطوة 1) قم بتسجيل الدخول إلى حساب pgAdmin الخاص بك.

الخطوة 2)

  1. من شريط التنقل الموجود على اليسار، انقر فوق قواعد البيانات.
  2. انقر فوق العرض التوضيحي.

حذف صف باستخدام شرط EXISTS في pgAdmin

الخطوة 3) اكتب الاستعلام في محرر الاستعلام:

DELETE FROM Book
WHERE EXISTS
  (SELECT 1
    FROM Price
    WHERE Price.id = Book.id
    AND price < 250 );

الخطوة 4) انقر فوق الزر "تنفيذ".

حذف صف باستخدام شرط EXISTS في pgAdmin

الخطوة 5) دعونا نتحقق مما إذا كان الحذف ناجحًا:

حذف صف باستخدام شرط EXISTS في pgAdmin

قم بتنزيل قاعدة البيانات المستخدمة في هذا البرنامج التعليمي

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

تحذف عملية TRUNCATE جميع الصفوف فورًا وتعيد ضبط التخزين، لكنها تتجاهل شرط WHERE ومحفزات الصفوف. أما عملية DELETE فتحذف صفوفًا محددة باستخدام شرط WHERE، وتُفعّل محفزات الصفوف، ويمكن التراجع عنها داخل المعاملة.

أضف عبارة USING: DELETE FROM member USING denylist WHERE member.phone = denylist.phone. تقوم هذه العبارة بربط الجدول الثاني وحذف الصفوف المطابقة، مما يعطي نفس نتيجة عبارة EXISTS ولكن بصياغة ربط أوضح.

يُعيد الأمر RETURNING أعمدة من الصفوف التي حُذفت للتو في نفس العبارة. اكتب DELETE FROM Price WHERE id = 4 RETURNING *, و PostgreSQL يقوم بإعادة البيانات المحذوفة حتى تتمكن التطبيقات من تسجيل التغيير أو تأكيده.

نعم. قم بتضمين أمر الحذف في معاملة باستخدام BEGIN، ثم قم بتشغيل ROLLBACK للتراجع عنه أو COMMIT للاحتفاظ به. إلى حين تنفيذ أمر COMMIT، يمكن استعادة الصفوف المحذوفة، مما يحمي من عمليات الحذف الخاطئة.

احتفظ بنسخة واحدة لكل مجموعة باستخدام عمود ctid المخفي: احذف من جدول Price a باستخدام Price b حيث a.ctid < b.ctid و a.id = b.id. هذا يزيل الصفوف المكررة مع الاحتفاظ بسجل واحد.

قم بتشغيل نفس عامل التصفية كـ SELECT أولاً، أو افتح معاملة باستخدام BEGIN واستخدم RETURNING لفحص الصفوف المتأثرة. Revإن معاينة نتيجة WHERE قبل COMMIT تمنع حذف صفوف أكثر من المقصود.

تقوم مساعدات الذكاء الاصطناعي بترجمة قواعد اللغة الإنجليزية البسيطة إلى أمر حذف مع شرط WHERE الصحيح، وتقترح استخدام EXISTS أو USING لعمليات الحذف عبر الجداول، وتحدد العبارات التي تفتقر إلى شرط من شأنه مسح الجدول بأكمله.

نعم. يقوم مساعد الذكاء الاصطناعي بمراجعة كل عملية حذف، ويحذر عند عدم وجود شرط WHERE، ويوصي بإجراء معاملة أو معاينة RETURNING، مما يقلل من خطر حذف الجدول بالكامل عن طريق الخطأ.

تلخيص هذه التدوينة بـ: