تشابه و تفاوت های موجود بین دو دستور جالب DELETE و TRUNCATE
  دستورهای DELETE و TRUNCATE دستوراتی هستند که جهت حذف اطلاعات از یک جدول استفاده می شوند. ولی این دستورات دارای تفاوت های جالبی نیز هستند که طراحان پایگاه داده حتما باید از آن مطلع باشند.
   SQL Server
   ۲۱۸۰۸
   این مقاله حاوی فایل ضمیمه نمی باشد
   مرتضی صحراگرد
   ۱۳۸۸/۴/۱۴
ارسال لینک صفحه برای دوستان ارسال لینک صفحه برای دوستان  اضافه کردن به علاقه مندیها اضافه کردن به علاقه مندیها   نسخه قابل چاپ نسخه قابل چاپ

 

معرفی دستور DELETE:

با این دستور حتما آشنا هستید. این دستور استاندارد جهت حذف اطلاعات (یا به عبارت درست تر، داده ها) از یک جدول استفاده می شود.

کاربرد این دستور معمولا به دو شکل زیر می باشد.

1. DELETE FROM MyTable

2. DELETE FROM MyTable WHERE ID < 100

در کاربرد نوع اول، تمام داده های موجود در جدول MyTable حذف شده و در دستور دوم فقط داده هایی حذف می شوند که شرط مورد نظر در مورد آن ها برقرار باشد.

معرفی دستور TRUNCATE:

دستور TRUNCATE یک دستور غیر استاندارد می باشد که جهت حذف تمامی داده های موجود در جدول استفاده می شود.

کاربرد این دستور به شکل زیر می باشد.

TRUNCATE TABLE MyTable

مقایسه دستورات DELETE و TRUNCATE:

  • دستور TRUNCATE بر خلاف دستور DELETE نمی تواند دارای شرط باشد. به عبارت دیگر شما نمی توانید عبارت WHERE را همراه این دستور بکار ببرید.
  • دستور TRUNCATE به صورت کمینه (Minimally) لاگ می شود در حالیکه دستور DELETE به صورت کامل لاگ می شود. بنابراین دستور TRUNCATE بسیار سریع تر از دستور DELETE عمل می کند. به طوریکه اگر جدول مورد نظر شامل میلیون ها رکورد باشد، با استفاده از دستور TRUNCATE ظرف چند ثانیه کل داده ها حذف می شوند در صورتی که با استفاده از دستور DELETE این عمل می تواند دقیقه ها و حتی ساعت ها طول بکشد.
  • اگر جدول ما حاوی فیلدی از نوع Identity باشد، پس از اجرای دستور TRUNCATE مقدار این فیلد Reset شده و به مقدار اولیه خود برمی گردد، در حالی که در مورد دستور DELETE چنین نیست.
  • اگر جدولی که قصد داریم داده های آن را حذف کنیم، توسط جداول دیگر ارجاع گرفته شده باشد یعنی فیلد کلید اصلی این جدول در جداول دیگری به عنوان کلید خارجی مورد استفاده قرار گرفته باشد، دیگر نمی توان از دستور TRUNCATE جهت حذف داده های این جدول استفاده نمود. حتی اگر جداول دیگر خالی بوده باشند و یا حتی اگر کلید های خارجی را غیر فعال (Disable) کنیم، باز هم نمی توانیم از دستور TRUNCATE استفاده کنیم و حتما باید روابط (Relations) را حذف کنیم تا بتوانیم از این دستور استفاده بکنیم. به طور مثال اگر جداول Order و OrderDetais را در نظر بگیریم، تا زمانی که بین این دو جدول رابطه وجود دارد، نمی توان دستور TRUNCATE رو روی جدول Order اجرا نمود.

تذکر مهم:

با توجه به اینکه دستور TRUNCATE بسیار سریع می باشد، میزان خطر آن به اندازه دستور DROP می باشد و استفاده اشتباه از آن می تواند منجر به فاجعه شود. بنابراین هنگام استفاده از این دستور دقت کافی را داشته باشید.

برگرفته از: Microsoft SQL Server 2008 T-SQL Fundamentals