contador Saltar al contenido

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

mayo 18, 2020
الفرق بين DELETE و DROP في SQL


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

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

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

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

تعريف الحذف

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

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

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

حذف من اسم الطاولة ONDE ( شرطي ) ؛

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

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

تعريف TRUNCATE

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

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

اقتطاع الجدول اسم الطاولة ؛

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

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

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

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

استنتاج:

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