سؤال

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

إذا كانت إجابتك خاصة بالمنصة، يرجى الإشارة إلى ذلك.

هل كانت مفيدة؟

المحلول

وهنا قائمة من الاختلافات.لقد سلطت الضوء على الميزات الخاصة بشركة Oracle، ونأمل أن يتمكن المجتمع من إضافة الاختلاف المحدد للبائعين الآخرين أيضًا.يمكن أن تظهر الاختلافات المشتركة بين معظم البائعين مباشرة أسفل العناوين، مع توضيح الاختلافات أدناه.


لمحة عامة

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

يجب مراعاة العديد من المشكلات الخاصة بالنظام، كما هو مفصل أدناه.


نوع البيان

الحذف هو DML، والاقتطاع هو DDL (ما هو DDL وDML؟)


الالتزام والتراجع

متغير من قبل البائع

خادم قاعدة البيانات

يمكن إرجاع اقتطاع.

PostgreSQL

يمكن إرجاع اقتطاع.

وحي

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

ومع ذلك، انظر الفلاش باك أدناه.


استصلاح الفضاء

لا يؤدي الحذف إلى استرداد المساحة، بينما يقوم Truncate باسترداد المساحة

وحي

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


نطاق الصف

يمكن استخدام الحذف لإزالة كافة الصفوف أو مجموعة فرعية من الصفوف فقط.اقتطاع يزيل كافة الصفوف.

وحي

عندما يتم تقسيم جدول، يمكن اقتطاع الأقسام الفردية بشكل منفصل، وبالتالي يكون من الممكن الإزالة الجزئية لجميع بيانات الجدول.


أنواع الكائنات

يمكن تطبيق الحذف على الجداول والجداول الموجودة داخل المجموعة.ينطبق الاقتطاع فقط على الجداول أو المجموعة بأكملها.(قد تكون خاصة بشركة Oracle)


هوية كائن البيانات

وحي

لا يؤثر الحذف على معرف كائن البيانات، ولكن الاقتطاع يعين معرف كائن بيانات جديد إلا إذا لم يكن هناك أي إدراج على الإطلاق في الجدول منذ إنشائه. حتى أن الإدخال الفردي الذي تم التراجع عنه سيؤدي إلى تعيين معرف كائن بيانات جديد عند الاقتطاع.


فلاش باك (اوراكل)

يعمل الارتجاع عبر عمليات الحذف، لكن الاقتطاع يمنع الارتجاع إلى الحالات السابقة للعملية.

ومع ذلك، بدءًا من الإصدار 11gR2، تسمح ميزة أرشيف الفلاش باك بذلك، باستثناء الإصدار السريع

استخدام الفلاش باك في أوراكل http://docs.Oracle.com/cd/E11882_01/appdev.112/e41502/adfns_flashback.htm#ADFNS638


الامتيازات

عامل

وحي

يمكن منح الحذف على الجدول لمستخدم أو دور آخر، ولكن لا يمكن أن يتم الاقتطاع بدون استخدام منحة DROP ANY TABLE.


إعادة التراجع

يؤدي الحذف إلى إنشاء قدر صغير من الإعادة وكمية كبيرة من التراجع.اقتطاع يولد كمية ضئيلة من كل منهما.


الفهارس

وحي

تؤدي العملية المقتطعة إلى جعل الفهارس غير القابلة للاستخدام قابلة للاستخدام مرة أخرى.حذف لا.


مفاتيح خارجية

لا يمكن تطبيق الاقتطاع عندما يشير المفتاح الخارجي الممكّن إلى الجدول.تعتمد المعالجة بالحذف على تكوين المفاتيح الخارجية.


قفل الجدول

وحي

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


محفزات

لا يتم تشغيل مشغلات DML عند الاقتطاع.

وحي

تتوفر مشغلات DDL.


التنفيذ عن بعد

وحي

لا يمكن إصدار Truncate عبر ارتباط قاعدة البيانات.


أعمدة الهوية

خادم قاعدة البيانات

يؤدي الاقتطاع إلى إعادة تعيين التسلسل لأنواع أعمدة IDENTITY، بينما لا يؤدي الحذف إلى ذلك.


مجموعة النتائج

في معظم التطبيقات، أ DELETE يمكن للبيان أن يعيد إلى العميل الصفوف التي تم حذفها.

على سبيل المثالفي برنامج فرعي لـ Oracle PL/SQL، يمكنك:

DELETE FROM employees_temp
WHERE       employee_id = 299 
RETURNING   first_name,
            last_name
INTO        emp_first_name,
            emp_last_name;

نصائح أخرى

الفرق بين الاقتطاع والحذف موضح أدناه:

+----------------------------------------+----------------------------------------------+
|                Truncate                |                    Delete                    |
+----------------------------------------+----------------------------------------------+
| We can't Rollback after performing     | We can Rollback after delete.                |
| Truncate.                              |                                              |
|                                        |                                              |
| Example:                               | Example:                                     |
| BEGIN TRAN                             | BEGIN TRAN                                   |
| TRUNCATE TABLE tranTest                | DELETE FROM tranTest                         |
| SELECT * FROM tranTest                 | SELECT * FROM tranTest                       |
| ROLLBACK                               | ROLLBACK                                     |
| SELECT * FROM tranTest                 | SELECT * FROM tranTest                       |
+----------------------------------------+----------------------------------------------+
| Truncate reset identity of table.      | Delete does not reset identity of table.     |
+----------------------------------------+----------------------------------------------+
| It locks the entire table.             | It locks the table row.                      |
+----------------------------------------+----------------------------------------------+
| Its DDL(Data Definition Language)      | Its DML(Data Manipulation Language)          |
| command.                               | command.                                     |
+----------------------------------------+----------------------------------------------+
| We can't use WHERE clause with it.     | We can use WHERE to filter data to delete.   |
+----------------------------------------+----------------------------------------------+
| Trigger is not fired while truncate.   | Trigger is fired.                            |
+----------------------------------------+----------------------------------------------+
| Syntax :                               | Syntax :                                     |
| 1) TRUNCATE TABLE table_name           | 1) DELETE FROM table_name                    |
|                                        | 2) DELETE FROM table_name WHERE              |
|                                        |    example_column_id IN (1,2,3)              |
+----------------------------------------+----------------------------------------------+

يسقط

يقوم الأمر DROP بإزالة جدول من قاعدة البيانات.ستتم أيضًا إزالة كافة صفوف الجداول والفهارس والامتيازات.لن يتم إطلاق أي مشغلات DML.لا يمكن التراجع عن العملية.

اقتطاع

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

يمسح

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

من: http://www.orafaq.com/faq/difference_between_truncate_delete_and_drop_commands

جميع الإجابات الجيدة ، والتي يجب أن أضيف إليها:

منذ TRUNCATE TABLE هو DDL (لغة تعريف البيانات)، وليس DML (لغة معالجة البيانات) الأمر، Delete Triggers لا تركض.

ملخص حذف مقابل اقتطاع في خادم SQL
لتكملة المقال اتبع هذا الرابط : http://codaffection.com/sql-server-article/delete-vs-truncate-in-sql-server/

enter image description here

مأخوذ من مقالة الدوت نت موب :حذف Vs Truncate في SQL Server

باستخدام SQL Server أو MySQL، إذا كان هناك PK مع زيادة تلقائية، فسيؤدي الاقتطاع إلى إعادة تعيين العداد.

"اقتطاع لا يسجل أي شيء" صحيح.سأذهب أبعد من ذلك:

لا يتم تنفيذ Truncate في سياق المعاملة.

يجب أن تكون ميزة سرعة الاقتطاع على الحذف واضحة.وتتراوح هذه الميزة من التافهة إلى الهائلة، اعتمادًا على موقفك.

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

نعم، DELETE أبطأ، TRUNCATE أسرع.لماذا؟

يجب أن يقوم DELETE بقراءة السجلات والتحقق من القيود وتحديث الكتلة وتحديث الفهارس وإنشاء إعادة/تراجع.كل ذلك يستغرق وقتا.

يقوم TRUNCATE ببساطة بضبط المؤشر في قاعدة البيانات للجدول (علامة ارتفاع المياه) والخطأ!لقد اختفت البيانات.

هذا خاص بشركة Oracle، AFAIK.

TRUNCATE هو بيان DDL بينما DELETE هو بيان DML.وفيما يلي الاختلافات بين الاثنين:

  1. مثل TRUNCATE هو DDL (لغة تعريف البيانات) بيان أنه لا يتطلب التزامًا بإجراء التغييرات بشكل دائم.وهذا هو السبب وراء عدم إمكانية التراجع عن الصفوف المحذوفة عن طريق الاقتطاع.على الجانب الآخر DELETE هو DML (لغة معالجة البيانات) وبالتالي يتطلب البيان التزامًا صريحًا لجعل تأثيره دائمًا.

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

  3. الصفوف المحذوفة بواسطة TRUNCATE TABLE لا يمكن استعادة العبارة ولا يمكنك تحديد جملة المكان في ملف TRUNCATE إفادة.

  4. TRUNCATE لا تقوم العبارات بإطلاق المشغلات بدلاً من تشغيل مشغل الحذف DELETE إفادة

هنا هو الرابط الجيد جدًا ذو الصلة بالموضوع.

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

المعلومات ذات الصلة أدناه هي من مشاركة مدونة:

أثناء العمل على قاعدة البيانات ، نستخدم الحذف والاختطاف دون معرفة الاختلافات بينهما.في هذه المقالة سنناقش الفرق بين الحذف والاقتطاع في SQL.

يمسح:

  • الحذف هو أمر DML.
  • يتم تنفيذ عبارة الحذف باستخدام قفل الصف، حيث يتم قفل كل صف في الجدول للحذف.
  • يمكننا تحديد المرشحات في جملة حيث.
  • يقوم بحذف البيانات المحددة في حالة وجود الشرط.
  • حذف الأنشطة مشغل لأنه يتم تسجيل العملية بشكل فردي.
  • أبطأ من Truncate لأنه يحتفظ بالسجلات

اقتطاع

  • Truncate هو أمر DDL.
  • يؤدي اقتطاع الجدول دائمًا إلى قفل الجدول والصفحة ولكن ليس كل صف. لأنه يزيل جميع البيانات.
  • لا يمكن استخدام شرط Where.
  • يقوم بإزالة كافة البيانات.
  • لا يمكن لجدول القطع تنشيط المشغل لأن العملية لا تسجل عمليات حذف الصفوف الفردية.
  • أسرع في الأداء، لأنه لا يحتفظ بأي سجلات.

ملحوظة:حذف وقطعة كلاهما يمكن ترحيلها عند استخدامها مع المعاملة.إذا تم إجراء المعاملة ، فهذا يعني أنه لا يمكننا ترحيل الأمر Truncate ، ولكن لا يزال بإمكاننا ترحيل أمر حذف من ملفات السجل ، حيث أن حذف كتابة سجلاتها في ملف السجل في حالة الحاجة إلى التراجع في المستقبل من ملفات السجل.

إذا كان لديك قيود مفتاح خارجي يشير إلى الجدول الذي تحاول اقتطاعه ، فلن يعمل هذا حتى لو لم يكن جدول المرجعية لا يحتوي على بيانات فيه.وذلك لأن فحص المفتاح الأجنبي يتم مع DDL بدلاً من DML.يمكن الحصول على هذا من خلال تعطيل قيود (ق) المفتاح الخارجي مؤقتًا إلى الطاولة.

حذف الجدول هو عملية مسجلة.لذلك يتم تسجيل حذف كل صف في سجل المعاملات ، مما يجعله بطيئًا.يقوم Truncate Table بحذف جميع الصفوف في الجدول ، لكنه لن يسجل حذف كل صف بدلاً من ذلك ، حيث يقوم بتسجيل توصيل صفحات البيانات في الجدول ، مما يجعله أسرع.

~ إذا قمت بإزالة جميع البيانات من الجدول باستخدام Delete/Truncate.يمكنك التراجع عن المعاملة الملتزم بها.استعادة آخر نسخة احتياطية وتشغيل سجل المعاملات حتى الوقت الذي يكون فيه حذف/اقتطاع على وشك الحدوث.

في SQL Server 2005 أعتقد أنك يستطيع التراجع عن اقتطاع

يمكن إرجاع TRUNCATE إذا تم تضمينه في معاملة.

يرجى الاطلاع على المرجعين أدناه واختبار نفسك: -

http://blog.sqlauthority.com/2007/12/26/sql-server-truncate-cant-be-rolled-back-using-log-files-after-transaction-session-is- Closed/

http://sqlblog.com/blogs/kalen_delaney/archive/2010/10/12/tsql-tuesday-11-rolling-back-truncate-table.aspx

TRUNCATE مقابل.يعد DELETE أحد الأسئلة سيئة السمعة أثناء مقابلات SQL.فقط تأكد من شرح ذلك بشكل صحيح للمسؤول عن المقابلة وإلا فقد يكلفك ذلك الوظيفة.تكمن المشكلة في أن الكثيرين لا يدركون ذلك، لذا على الأرجح سيعتبرون الإجابة خاطئة إذا أخبرتهم أنه يمكن التراجع عن YES Truncate.

يمسح

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

اقتطاع

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

يسقط

يقوم الأمر DROP بإزالة جدول من قاعدة البيانات.ستتم أيضًا إزالة كافة صفوف الجداول والفهارس والامتيازات.لن يتم إطلاق أي مشغلات DML.لا يمكن التراجع عن العملية.


DROP و TRUNCATE هما أمران DDL، بينما DELETE هو أمر DML.ولذلك، يمكن التراجع عن عمليات الحذف (التراجع عنها)، بينما لا يمكن التراجع عن عمليات DROP و TRUNCATE.

من: http://www.orafaq.com/faq/difference_between_truncate_delete_and_drop_commands

تصحيح بسيط للإجابة الأصلية - يؤدي الحذف أيضًا إلى إنشاء كميات كبيرة من الإعادة (حيث أن التراجع محمي بحد ذاته عن طريق الإعادة).يمكن ملاحظة ذلك من إخراج التتبع التلقائي:

SQL> delete from t1;

10918 rows deleted.

Elapsed: 00:00:00.58

Execution Plan
----------------------------------------------------------
   0      DELETE STATEMENT Optimizer=FIRST_ROWS (Cost=43 Card=1)
   1    0   DELETE OF 'T1'
   2    1     TABLE ACCESS (FULL) OF 'T1' (TABLE) (Cost=43 Card=1)




Statistics
----------------------------------------------------------
         30  recursive calls
      12118  db block gets
        213  consistent gets
        142  physical reads
    3975328  redo size
        441  bytes sent via SQL*Net to client
        537  bytes received via SQL*Net from client
          4  SQL*Net roundtrips to/from client
          2  sorts (memory)
          0  sorts (disk)
      10918  rows processed

هنا إجابتي التفصيلية على الفرق بين DELETE و TRUNCATE في SQL Server

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

من البند :باستخدام DELETE، يمكنك أيضًا حذف صفوف من جدول/عرض/rowset_function_limited واحد استنادًا إلى صفوف من جدول آخر باستخدام عبارة FROM أخرى.في جملة FROM هذه، يمكنك أيضًا كتابة شروط JOIN العادية.في الواقع، يمكنك إنشاء عبارة DELETE من عبارة SELECT التي لا تحتوي على أي وظائف مجمعة عن طريق استبدال SELECT بـ DELETE وإزالة أسماء الأعمدة.
مع TRUNCATE لا يمكنك فعل ذلك.

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

أداء :TRUNCATE TABLE أسرع ويستخدم موارد أقل للنظام وسجل المعاملات.وأحد الأسباب هو الأقفال التي تستخدمها أي من العبارتين.يتم تنفيذ عبارة الحذف باستخدام قفل الصف، حيث يتم قفل كل صف في الجدول للحذف.يقوم TRUNCATE TABLE دائمًا بتأمين الجدول والصفحة ولكن ليس كل صف.

سجل المعاملات :تقوم عبارة DELETE بإزالة الصفوف واحدًا تلو الآخر وإنشاء إدخالات فردية في سجل المعاملات لكل صف.
يقوم TRUNCATE TABLE بإزالة البيانات عن طريق إلغاء تخصيص صفحات البيانات المستخدمة لتخزين بيانات الجدول ويسجل فقط عمليات إلغاء تخصيص الصفحات في سجل المعاملات.

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

مشغل :لا يقوم TRUNCATE بتنشيط مشغلات الحذف على الجدول.لذلك يجب أن تكون حذرًا للغاية أثناء استخدام TRUNCATE.لا ينبغي لأحد استخدام TRUNCATE أبدًا إذا تم تحديد مشغل الحذف في الجدول للقيام ببعض عمليات التنظيف التلقائي أو إجراءات التسجيل عند حذف الصفوف.

عمود الهوية :باستخدام TRUNCATE، إذا كان الجدول يحتوي على عمود هوية، تتم إعادة تعيين عداد هذا العمود إلى القيمة الأولية المحددة للعمود.إذا لم يتم تحديد أي بذرة، فسيتم استخدام القيمة الافتراضية 1.لا يؤدي حذف DELETE إلى إعادة تعيين عداد الهوية.لذا، إذا كنت تريد الاحتفاظ بعداد الهوية، استخدم DELETE بدلاً من ذلك.

تكرار :يمكن استخدام DELETE مقابل الجدول المستخدم في النسخ المتماثل للمعاملات أو دمج النسخ المتماثل.
بينما لا يمكن استخدام TRUNCATE مقابل الجداول المتضمنة في النسخ المتماثل للمعاملات أو دمج النسخ المتماثل.

التراجع :يمكن التراجع عن عبارة DELETE.
يمكن أيضًا إرجاع TRUNCATE بشرط أن يكون محاطًا بكتلة TRANSACTION وألا يتم إغلاق الجلسة.بمجرد إغلاق الجلسة، لن تتمكن من التراجع عن الاقتطاع.

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

الاختلاف الأكبر هو أن عملية الاقتطاع لا يتم تسجيلها بينما يتم إجراء عملية الحذف.

ببساطة هذا يعني أنه في حالة تعطل قاعدة البيانات، لا يمكنك استعادة البيانات التي تم تشغيلها عن طريق الاقتطاع ولكن مع الحذف يمكنك ذلك.

المزيد من التفاصيل هنا

حذف البيان:يحذف هذا الأمر فقط الصفوف من الجدول بناءً على الشرط الوارد في عبارة المكان أو يحذف جميع الصفوف من الجدول إذا لم يتم تحديد أي شرط.ولكنه لا يحرر المساحة التي تحتوي على الجدول.

بناء جملة عبارة SQL DELETE هو:

حذف من اسم الجدول [أين الشرط]؛

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

يمسح

DELETE is a DML command
DELETE you can rollback
Delete = Only Delete- so it can be rolled back
In DELETE you can write conditions using WHERE clause
Syntax – Delete from [Table] where [Condition]

اقتطاع

TRUNCATE is a DDL command
You can't rollback in TRUNCATE, TRUNCATE removes the record permanently
Truncate = Delete+Commit -so we can't roll back
You can't use conditions(WHERE clause) in TRUNCATE
Syntax – Truncate table [Table]

لمزيد من التفاصيل زيارة

http://www.zilckh.com/what-is-the-difference-between-truncate-and-delete/

أحد الاختلافات الأخرى بين العمليتين هو أنه إذا كان الجدول يحتوي على عمود هوية، فسيتم إعادة تعيين عداد هذا العمود إلى 1 (أو إلى القيمة الأولية المحددة للعمود) ضمن TRUNCATE.DELETE ليس له هذا التأثير.

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

أحد الأسباب الرئيسية وراء سهولة استخدامه هو عندما تحتاج إلى تحديث البيانات في جدول يضم ملايين الصفوف، ولكنك لا ترغب في إعادة بنائها.قد يستغرق "حذف *" وقتًا طويلاً، في حين أن تأثير أداء Truncate سيكون ضئيلًا.

لا يمكن القيام بـ DDL عبر dblink.

أود التعليق على مشاركة ماتيو، لكن ليس لدي مندوب بعد...

في MySQL، تتم إعادة تعيين عداد الزيادة التلقائية عن طريق الاقتطاع، ولكن ليس عن طريق الحذف.

لا يعني ذلك أن الاقتطاع لا يسجل أي شيء في SQL Server.لا يقوم truncate بتسجيل أي معلومات ولكنه يسجل إلغاء تخصيص صفحة البيانات للجدول الذي قمت بتشغيل TRUNCATE عليه.

ويمكن التراجع عن السجل المبتور إذا قمنا بتحديد المعاملة في البداية ويمكننا استرداد السجل المبتور بعد استرجاعه.ولكن لا يمكن استرداد السجلات المبتورة من النسخة الاحتياطية لسجل المعاملات بعد الالتزام بالمعاملة المقتطعة.

يمكن أيضًا التراجع عن الاقتطاع هنا في المثال

begin Tran
delete from  Employee

select * from Employee
Rollback
select * from Employee

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

راجع الاختيار انقر هنا

من خلال إصدار عبارة TRUNCATE TABLE، فإنك تقوم بإرشاد SQL Server لحذف كل سجل داخل الجدول، دون إجراء أي تسجيل أو معالجة المعاملات.

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

هناك اختلاف آخر خاص بخادم Microsoft SQL وهو delete يمكنك استخدام output بيان لتتبع السجلات التي تم حذفها، على سبيل المثال:

delete from [SomeTable]
output deleted.Id, deleted.Name

لا يمكنك فعل هذا مع truncate.

اقتطاع يتم استخدام الأمر لإعادة تهيئة الجدول، وهو أمر DDL يقوم بحذف جميع صفوف الجدول. يمسح هو أمر DML يستخدم لحذف صف أو مجموعة من الصفوف وفقًا لبعض الشروط، إذا لم يتم تحديد الشرط، فسيقوم هذا الأمر بحذف جميع الصفوف من الجدول.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top