دستور TRUNCATE و DELETE در SQL
دستور TRUNCATE و DELETE از دستورات پر کاربرد در زبان SQL و هوش تجاری می باشند که برای حذف ردیف ها از جداول استفاده می شوند.
دستورDelete در SQL Server
ما از دستور DeleteدرSQL Server برای حذف رکوردها از جدول استفاده می کنیم. میتوانیم تمام رکوردها را حذف کنیم یا از عبارت Where برای حذف رکوردهای مطابق با شرط ها استفاده کنیم.
دستورTruncate در SQL Server
Truncate یک دستور زبان تعریف داده (DDL) یا Data Defrnition Language است. تمام ردیف های جدول را حذف می کند. SQL Server داده های یک جدول را در Pages ذخیره می کند. دستور truncate با جدا کردن Pages، ردیف ها را حذف می کند. این یک ورودی برای عدم تخصیص pages در گزارش تراکنش ایجاد می کند. حذف هر ردیف را در گزارش تراکنش ثبت نمی کند.
ما نمی توانیم هیچ شرطی را در دستورTruncate تعیین کنیم. در سطح بالا، میتوانید دستور truncateرا شبیه به دستور Delete بدون بند Where در نظر بگیرید. جدول و pages را به جای یک ردیف قفل می کند.
تفاوت دستور TRUNCATE و DELETE
این 2 دستور تفاوت هایی را با هم دارند که در ادامه به تفاوت های آنها می پردازیم.
- سرعت دستور Truncate بیشتر از سرعت دستور Delete می باشد.
- دستور Delete در هنگام پاک کردن ردیف ها، در LOG FILE، ردیف به ردیف را لاگ می کند اما دستور Truncate این کار را نمی کند.
- اگر در جدول مربطه ستون (Identity) یا همان AI داشته باشیم، زمانی که از دستور Truncate استفاده می کنیم کل حافظه آزاد می شود و این شمارنده ریست می شود اما دستورDelete حافظه را آزاد نمی کند و سطر بعدی که درج می شود، شمارنده ستون Identity در ادامه آخرین شماره درج می شود.
- دستور Delete شرط می پذیرد ( مثلا رکورد با Id برابر1000 را میخواهیم پاک کنیم) اما دستورTruncate شرط پذیر نیست و کل دیتای جدول را پاک می کند.
- بعد از دستور Delete میتوان از Commit و Roll Back استفاده کرد، اما برای دستور Truncate این کار امکان پذیر نیست و برگشت ناپذیر است.