در SQL ، دستور TRUNCATE TABLE
یک عملیات زبان دستکاری داده ها (DML) است که تمام ردیف های یک جدول را بدون ایجاد یک عمل فعال حذف می کند. نتیجه این عملیات به سرعت تمام دادهها را از یک جدول حذف میکند و معمولاً تعدادی از مکانیسمهای اعمال یکپارچگی را دور میزند. این به طور رسمی در استاندارد SQL:2008 ، به عنوان ویژگی اختیاری F200، "TRUNCATE TABLE" معرفی شد.
TRUNCATE TABLE همه سطرها را از جدول حذف می کند، اما ساختار جدول و ستون ها، محدودیت ها، شاخص ها و غیره باقی می مانند. برای حذف تعریف جدول علاوه بر داده های آن، از عبارت DROP TABLE استفاده کنید.
دستور TRUNCATE TABLE mytable
از نظر منطقی (البته نه از نظر فیزیکی) معادل عبارت DELETE FROM mytable
(بدون عبارت WHERE
) است. ویژگی های زیر TRUNCATE TABLE
از DELETE
متمایز می کند:
TRUNCATE
به طور ضمنی قبل و بعد از یک عملیات commit قرار می گیرد. (این مورد ممکن است در MySQL، هنگام استفاده از یک موتور ذخیره سازی تراکنشی نیز وجود داشته باشد.)TRUNCATE TABLE
به سرعت تمام رکوردهای یک جدول را با جدا کردن صفحات داده استفاده شده توسط جدول حذف می کند. این باعث کاهش سربار منبع ثبت حذفها و همچنین تعداد قفلهای بهدستآمده میشود. سوابق حذف شده از این طریق را نمی توان در یک عملیات برگشتی بازیابی کرد. دو استثنای قابل توجه برای این قانون، پیادهسازیهایی هستند که در PostgreSQL و Microsoft SQL Server یافت میشوند، که هر دو اجازه میدهند تا دستورات TRUNCATE TABLE
به صورت تراکنشی متعهد یا بازگردانده شوند.WHERE
در عبارت TRUNCATE TABLE
امکان پذیر نیست.TRUNCATE TABLE
زمانی که یک کلید خارجی به جدولی که باید کوتاه شود ارجاع می دهد نمی تواند استفاده شود، زیرا دستورات TRUNCATE TABLE
باعث شلیک نمی شوند. این میتواند منجر به دادههای متناقض شود زیرا محرکهای ON DELETE
/ ON UPDATE
فعال نمیشوند.TRUNCATE TABLE
تعداد ستون Identity را به دانه هویت بازنشانی می کند.TRUNCATE TABLE
میتوان برای جداول درگیر در ارسال گزارش استفاده کرد.