افت در مقابل کوتاه کردن
Drop و Truncate دو عبارت SQL (زبان جستجوی ساختاریافته) هستند که در سیستم های مدیریت پایگاه داده استفاده می شوند، جایی که ما می خواهیم رکوردهای داده را از پایگاه داده حذف کنیم. هر دو دستور Drop و Truncate کل داده های یک جدول و دستور SQL مربوطه را حذف می کنند. عملیات حذف در این مورد موثر نیست زیرا از فضای ذخیره سازی بیشتری نسبت به Drop و Truncate استفاده می کند.
در صورتی که بخواهیم یک جدول را در یک پایگاه داده با تمام داده های آن به طور کامل کنار بگذاریم، SQL به ما اجازه می دهد تا به راحتی این کار را با استفاده از دستور Drop انجام دهیم. دستور Drop یک دستور DDL (زبان تعریف داده) است و می توان از آن برای از بین بردن پایگاه داده، جدول، فهرست یا نمای موجود استفاده کرد.کل اطلاعات یک جدول و همچنین ساختار جدول را از پایگاه داده حذف می کند. همچنین، ممکن است بخواهیم از شر تمام داده های یک جدول به سادگی، اما بدون جدول خلاص شویم و در چنین سناریویی می توانیم از دستور Truncate در SQL استفاده کنیم. Truncate نیز یک دستور DDL است و تمام ردیفهای جدول را حذف میکند اما تعریف جدول را برای استفاده در آینده حفظ میکند.
دستور رها کردن
همانطور که قبلاً ذکر شد، دستور Drop تعریف جدول و تمام دادهها، محدودیتهای یکپارچگی، شاخصها، محرکها و امتیازات دسترسی را که در آن جدول خاص ایجاد شده بود، حذف میکند. بنابراین شی موجود را به طور کامل از پایگاه داده حذف می کند و روابط با جداول دیگر نیز پس از اجرای دستور دیگر معتبر نخواهد بود. همچنین تمام اطلاعات مربوط به جدول را از دیکشنری داده حذف می کند. در زیر نحو معمولی برای استفاده از دستور Drop در جدول آمده است.
جدول رها کردن
باید به سادگی نام جدولی را که می خواهیم از پایگاه داده حذف کنیم در مثال بالا دستور Drop جایگزین کنیم.
مهم است که به این نکته اشاره کنیم که دستور Drop را نمی توان برای حذف جدولی که قبلاً توسط یک محدودیت کلید خارجی ارجاع داده شده است استفاده کرد. در آن صورت، محدودیت کلید خارجی ارجاع یا آن جدول خاص باید ابتدا حذف شود. همچنین، دستور Drop را نمی توان روی جداول سیستم در پایگاه داده اعمال کرد.
از آنجایی که دستور Drop یک عبارت commit خودکار است، عملیات پس از اجرا نمی تواند به عقب برگردد و هیچ ماشه ای شلیک نمی شود. هنگامی که جدول حذف می شود، تمام ارجاعات به جدول معتبر نخواهند بود، و بنابراین، اگر بخواهیم دوباره از جدول استفاده کنیم، باید با تمام محدودیت های یکپارچگی و امتیازات دسترسی دوباره ایجاد شود. تمام روابط با جداول دیگر نیز باید دوباره قرار گیرند.
دستور کوتاه کردن
دستور Truncate یک دستور DDL است و تمام ردیفهای جدول را بدون هیچ شرایطی که کاربر مشخص کرده است حذف میکند و فضای مورد استفاده جدول را آزاد میکند، اما ساختار جدول با ستونها، شاخصها و محدودیتهای آن ثابت میماند. Truncate دادهها را از جدول حذف میکند و صفحات دادهای را که برای ذخیرهسازی دادههای جدول استفاده میشود، حذف میکند و فقط این تخصیصهای صفحه در گزارش تراکنش نگهداری میشوند. بنابراین در مقایسه با سایر دستورات SQL مرتبط مانند Delete از منابع گزارش تراکنش و منابع سیستم کمتری استفاده می کند. بنابراین عبارت Truncate کمی سریعتر از سایرین است. در زیر نحو معمولی برای دستور Truncate آمده است.
TRUNCATE TABLE
باید نام جدول را که میخواهیم کل دادهها را از آن حذف کنیم، در نحو بالا جایگزین کنیم.
Truncate را نمی توان در جدولی که توسط یک محدودیت کلید خارجی ارجاع داده شده است استفاده کرد. قبل از عمل از یک commit به صورت خودکار و بعد از آن از یک commit دیگر استفاده می کند، بنابراین بازگشت تراکنش غیرممکن است و هیچ ماشه ای شلیک نمی شود. اگر بخواهیم از جدول استفاده مجدد کنیم، فقط باید به تعریف جدول موجود در پایگاه داده دسترسی داشته باشیم.
تفاوت بین Drop و Truncate چیست؟
هر دو دستور Drop و Truncate دستورات DDL و همچنین دستورات commit خودکار هستند، بنابراین تراکنشهای انجام شده با استفاده از این دستورات قابل برگشت نیستند.
تفاوت اصلی بین Drop و Truncate این است که دستور Drop نه تنها تمام داده های یک جدول را حذف می کند، بلکه ساختار جدول را به طور دائم از پایگاه داده با همه مراجع حذف می کند، در حالی که دستور Truncate فقط همه را حذف می کند. ردیفهای یک جدول، و ساختار جدول و مراجع آن را حفظ میکند.
اگر جدولی حذف شود، روابط با جداول دیگر دیگر معتبر نخواهد بود و محدودیتهای یکپارچگی و امتیازات دسترسی نیز حذف خواهند شد. بنابراین اگر جدول برای استفاده مجدد مورد نیاز است، باید با روابط، محدودیتهای یکپارچگی و همچنین امتیازات دسترسی بازسازی شود. اما اگر یک جدول کوتاه شود، ساختار جدول و محدودیتهای آن برای استفاده در آینده باقی میماند، و بنابراین، هیچ یک از موارد فوق برای استفاده مجدد لازم نیست.
وقتی این دستورات اعمال می شوند، باید در استفاده از آنها محتاط باشیم. همچنین، ما باید درک بهتری از ماهیت این دستورات، نحوه عملکرد آنها داشته باشیم و همچنین قبل از استفاده از آنها برنامه ریزی دقیقی داشته باشیم تا از گم شدن موارد ضروری جلوگیری کنیم.در نهایت، هر دوی این دستورات را میتوان برای پاکسازی سریع و آسان پایگاههای داده، با مصرف منابع کمتر مورد استفاده قرار داد.