موصى به, 2021

اختيار المحرر

الفرق بين DELETE و TRUNCATE في SQL

DELETE و TRUNCATE هي الأوامر التي تستخدم لإزالة tuples من علاقة ، ولكنها تختلف في سياقات كثيرة. في SQL ، يعتبر الأمر DELETE أمرًا في لغة معالجة البيانات بينما الأمر TRUNCATE عبارة عن أمر لغة تعريف البيانات . ومع ذلك ، فإن النقطة التي تسمح لنا بالتمييز بين DELETE و TRUNCATE هي أن DELETE قادر على إزالة مجموعات محددة من علاقة ، حيث أن الأمر TRUNCATE يزيل مجموعة كاملة من علاقة.

يجب أن لا نتوقف هنا ، هناك العديد من الاختلافات الأخرى بين DELETE و TRUNCATE. دعونا نناقشها بمساعدة من الرسم البياني للمقارنة المبين أدناه.

رسم بياني للمقارنة

أساس من أجل Comparsionحذفباقتطاع
الأساسيةيمكنك تحديد المجموعة التي تريد حذفها.يحذف جميع tuples من علاقة.
لغةDELETE هو أمر لغة معالجة البيانات.TRUNCATE هو أمر لغة تعريف البيانات.
أينيمكن أن يكون للأمر DELETE جملة WHERE.لا يحتوي الأمر TRUNCATE جملة WHERE.
اثاريؤدي الأمر DELETE إلى تنشيط المشغل المطبق على الطاولة ويؤدي إلى إطلاقها.لا يقوم الأمر TRUNCATE بتنشيط المشغلات لإطلاقها.
حذفيحذف الأمر DELETE الصفوف الواحدة تلو الأخرى.اقتطاع حذف صفحة البيانات بالكامل التي تحتوي على المجموعات.
قفلأمر DELETE قفل الصف / المجموعة قبل حذفها.اقتطاع صفحة بيانات قفل الأوامر قبل حذف بيانات الجدول.
سرعةيعمل الأمر DELETE أبطأ مقارنة بـ TRUNCATE.اقتطاع أسرع مقارنة DELETE.
عملية تجاريةDELETE يسجل سجل المعاملات لكل مجموعة محذوفة.سجل TRUNCATE سجل المعاملة لكل صفحة البيانات المحذوفة.
استعادةيمكن اتباع الأمر DELETE إما عن طريق COMMIT أو ROLLBACK.لا يمكن أن يكون الأمر TRUNCATE ROLLBACK.

تعريف DELETE

DELETE هو أمر لغة معالجة البيانات (DML). مهمة الأمر DELETE هي حذف أو إزالة المجموعات من جدول أو علاقة. باستخدام DELETE ، نحن قادرون على إزالة المجموعة الكاملة ، مع جميع قيم السمات الخاصة بها من العلاقة. لا يؤدي حذف DELETE إلى إزالة قيمة سمة معينة ، من tuple من العلاقة.

يمكنك تصفية المجموعات التي تريد حذفها من جدول ، باستخدام جملة WHERE . إذا حددت جملة WHERE في عبارة DELETE ، فسيؤدي ذلك إلى حذف المجموعات التي تلبي شرط جملة WHERE فقط. ولكن إذا لم تحدد جملة WHERE في عبارة DELETE ، فبإمكانها بشكلٍ افتراضي حذف أو حذف جميع المجموعات من العلاقة. يمكن أن تحتوي جملة WHERE في عبارة DELETE على عبارات SELECT-FROM-WHER المتداخلة.

بناء جملة الأمر DELETE كما يلي:

DELETE FROM table_name WHERE [ conditon

يعمل الأمر DELETE فقط على علاقة مفردة أو جدول في وقت واحد. في حال كنت تريد حذف المجموعة من العلاقات المختلفة ، يجب عليك وضع أمر DELETE مختلف لكل منهما. لكن حذف الصفوف من علاقة واحدة قد ينتهك التكامل المرجعي لقاعدة البيانات ، والتي يمكن حلها بمساعدة المشغلات. إذا انتهك الأمر DELETE التكامل المرجعي ، فسيتم تنشيط كل المشغلات المرجعية (إذا تم تحديدها) التي تقوم بنشر إجراء الحذف على مجموعات مختلفة من العلاقة التي تشير إلى المجموعات المحذوفة.

يؤدي الأمر DELETE أولاً إلى قفل الصف أو المجموعة المراد حذفها ثم حذف المجموعة الواحدة تلو الأخرى . ومن ثم ، فإنها تتطلب المزيد من الأقفال والموارد مما يجعلها أبطأ . يمكنك إجراء التغييرات التي تم إجراؤها بواسطة عبارة DELETE دائمة باستخدام COMMIT ، أو يمكنك إعادة تعيين قاعدة البيانات باستخدام ROLLBACK .

تعريف اقتطاع

يشبه TRUNCATE الأمر DELETE كما أنه يحذف tuples من علاقة. الفرق هو أنه يحذف مجموعة كاملة من العلاقة. عند تنفيذ الأمر TRUNCATE ، يتم حذف بيانات كاملة من الجدول ، ويتم التخلص من كل مجموعة مع كل قيم السمات الخاصة بها من الجدول. لكن بنية الجدول لا تزال موجودة في قاعدة البيانات. لذلك ، يمكنك مرة أخرى إدخال الصفوف في الجدول. TRUNCATE هو أمر لغة تعريف البيانات.

بناء جملة الأمر TRUNCATE كما يلي:

اقتطاع الجدول table_name .

مثل DELETE ، لا يعمل TRUNCATE على بيانات الجدول صفًا تلو الآخر. بدلاً من ذلك ، تعمل على صفحات البيانات التي تخزن بيانات الجدول. الآن ، عندما يقوم TRUNCATE بحذف صفحات البيانات ، يجب عليه الحصول على تأمين على صفحات البيانات بدلاً من الصفوف (tuples). وبالتالي ، ينتج عنه متطلبات أقل من التأمين والموارد التي تجعل TRUNCATE أسرع مقارنة DELETE.

لا يؤدي تنفيذ الأمر TRUNCATE إلى تنشيط أية مشغلات نظرًا لأنه لا يعمل بيانات صفًا تلو الآخر. لا يمكن تنفيذ TRUNCATE في حالة الرجوع إلى الجدول بواسطة أي مفتاح خارجي . بمجرد حذف الأمر TRUNCATE بيانات الجدول ، فإنه لا يمكن استردادها مرة أخرى.

الاختلافات الرئيسية بين DELETE و TRUNCATE في SQL

  1. الفرق الرئيسي بين DELETE و TRUNCATE هو أن استخدام DELETE يمكنك حذف مجموعة محددة من علاقة. ولكن استخدام TRUNCATE سيؤدي إلى حذف مجموعة كاملة من العلاقة.
  2. DELETE هو أمر DML بينما ، TRUNCATE هو أمر DDL.
  3. يستخدم DELETE عبارة WHERE لتصفية السجل / المجموعات التي سيتم حذفها. ومع ذلك ، لا يتطلب TRUNCATE جملة WHERE لأنها تحذف جميع المجموعات ، لذلك لا حاجة إلى تصفية المجموعات.
  4. يقوم DELETE بتنشيط المشغلات المرجعية المطبقة على الجداول. ولكن لا يطلق TRUNCATE أي مشغلات على الطاولة.
  5. يحذف الأمر DELETE الصفوف الواحدة تلو الأخرى من الجدول ، بالترتيب ، تتم معالجتها. ومع ذلك ، لا يعمل TRUNCATE على tuples واحداً تلو الآخر. بدلاً من ذلك ، يعمل TRUNCATE على صفحة بيانات تخزِّن بيانات الجدول.
  6. تحصل DELETE على القفل على المجموعة قبل حذفها ، بينما تحصل TRUNCATE على القفل في صفحة البيانات قبل حذف صفحة البيانات.
  7. اقتطاع أسرع بالمقارنة مع الأمر DELETE.
  8. سجل المعاملات سجل DELETE لكل مجموعة بينما سجل TRUNCATE سجل المعاملات لكل صفحة بيانات.
  9. بمجرد حذف البيانات باستخدام TRUNCATE ، لا يمكن استردادها مرة أخرى في حين يمكنك استعادة بياناتك التي قمت بحذفها باستخدام الأمر DELETE.

استنتاج:

إذا كنت ترغب في تخصيص حذف السجلات من الجدول ، فيمكنك استخدام الأمر DELETE. إذا كنت ترغب في إفراغ الجدول أي أنك لا تريد ترك أي بيانات في جدول ، فاستخدم الأمر TRUNCATE.

Top