دستور Turncate در SQL برای این طراحی شده که همه رکوردهای موجود در جدولی را حذف کند. در حالی که شاید این دستور از لحاظ ظاهری شبیه به دستور DELETE در SQL باشد اما باهم تفاوتهای مهمی دارند. دستور DELETE هم برای حذف رکوردها از درون جدولهای پایگاه داده به کار برده میشود. در این مطلب تفاوتهای میان دستور DELETE و Turncate را نیز بررسی و بیان کردهایم. برای کار با پایگاههای داده مبتنی بر زبان SQL هم لازم است که با دستورات حرفهای این زبان مانند دستور Turncate آشنا شویم.
در این مطلب از مجله فرادرس به صورت کامل به بررسی دستور Turncate در SQL پرداخته و تفاوتهای آن را با دستور DELETE بیان کردهایم. در ابتدا با توضیح کاملی درباره این دستور شروع کرده و سپس مثالهای مختلفی را به صورت کدنویسی شده نمایش دادیم. در نهایت هم Turncate را با رقیب اصلی خود که دستور DELETE است مقایسه کرده و شرایط مربوط به مجوز مورد نیاز برای استفاده از آن را بیان کردهایم.
دستور Turncate در SQL چیست؟
دستور Turncate در SQL برای حذف رکوردهای درون جدول یا بخش خاصی از جدول به کار برده میشود. بعد از استفاده دستور Turncate بر روی جدول، حتی با استفاده از ROLLBACK هم دیگر امکان بازیابی دادهها وجود ندارد.
این دستور شبیه به فرمان DELETE است، با این تفاوت که از دستور WHERE در SQL استفاده نمیکند. مهمترین ویژگیهای دستور Turncate را در فهرست پایین ارائه دادهایم.
- «دستور جدول Turncate» یا (TRUNCATE TABLE Command)، یکی از دستورات «زبان تعریف داده» (Data Definition Language | DDL) است.
- دستور Turncate در زمان کار Trigger-های SQL را فعال نمیکند.
- این دستور فقط دادههای جدول را حذف میکند، در حالی که خود جدول با همان تعریف که ایجاد شده به صورت ثابت – ولی خالی – باقی میماند.
- عملیات حذف ردیفها با کمک این دستور به شکل کلی و بدون گزارشبرداری از عملیات حذف هر ردیف به صورت مجزا صورت میگیرد. به همین دلیل، اجرای Turncate نسبت به دستور DELETE از سرعت بیشتری برخوردار است.
فیلم های آموزشی پیشرفته SQL در فرادرس
SQL یا «زبان پرس و جوی ساختاریافته» (Structured Query Language)، ابزار تخصصی است که برای کار بر روی پایگاههای داده رابطهای استفاده میشود. در واقع، از این زبان میتوان برای ساخت پایگاه داده رابطهای و جداول درون آن استفاده کرد. علاوه بر این کارها، با کمک توابع مهم و کاربردی SQL، مدیران پایگاه داده تسلط بسیار خوبی بر روی تمام دادههای خود دارند. در حال حاضر SQL یکی از پرکاربردترین زبانهای اختصاصی برای مدیریت پایگاههای دادهای در دنیا است. توانایی کار به صورت حرفهای با این پایگاه داده باعث گشوده شدن فرصتهای شغلی فراوان در مقابل برنامهنویسان میشود.
فرادرس به عنوان قویترین تولیدکننده فیلمهای آموزشی فارسی، تلاش کرده که تمام زبانهای برنامهنویسی و تکنولوژیها مربوط به مدیریت پایگاه داده را نیز پوشش دهد. به همین دلیل برای آموزش SQL Server، فیلمهای آموزشی بسیار مناسبی را تهیه کرده است. SQL Server یکی از پایگاههای داده قدیمی، با تجربه و قدرتمندی است که از زبان SQL استفاده میکند. آموزش کامل کار با این پایگاه داده نیازمند یادگیری حرفهای زبان SQL است. با مشاهده منظم فیلمهای آموزشی فرادرس و تمرین پایدار، برای کار با پایگاههای دادهای SQL، به شکل بسیار عالی مسلط شوید. در پایین چند مورد از فیلمهای آموزشی فرادرس را معرفی کردهایم.
سینتکس استفاده از دستور Turncate در SQL
دستور Turncate در SQL یکی از عبارتهای پیشرفته کوئرینویسی است. با کمک این دستور میتوان جداول را به صورت حرفهایتری مدیریت کرد. مخصوصا در پایگاههای داده بزرگ و فعالی که تعداد تراکنشهای بسیار زیادی را تجربه میکنند. اما قواعد مربوط به کوئرینویسی پیشرفته بیش از این موارد است.
سینتکس مورد نیاز برای اعمال دستور Turncate فقط به صورت فرمان یک خطی نوشته میشود. سینتکس خام مورد نیاز برای این دستور را در کادر زیر نمایش دادهایم.
1TRUNCATE TABLE table_name;
در کد بالا قابل مشاهده است که ابتدا از عبارت کلیدی TRUNCATE TABLE استفاده شده است. استفاده از این عبارت الزامی است. سپس نام جدول مورد نظر در جایگاه پارامتر table_name قرار میگیرد.
برای آشنا شدن با قواعد کوئرینویسی پیشرفته، پیشنهاد میکنیم که فیلم آموزش کوئری نویسی پیشرفته در SQL Server را از فرادرس مشاهده کنید. لینک مربوط به این فیلم را در پایین نیز قرار دادهایم.
در ادامه این بخش، برای بررسی روش مناسب استفاده از دستور جدول Turncate در SQL، چند مثال مختلف را پیادهسازی کردهایم.
مثال هایی از کاربرد دستور Turncate
در مثال زیر، برای نمایش مشخصات دانشآموزانی که در درسهای مختلف بیشترین نمره را گرفتهاند، اول از همه جدولی را ایجاد میکنیم. نام این جدول student است. برای ساخت جدول در SQL از دستور CREATE TABLE و برای وارد کردن دادههای نمونه در این جدول از دستور INSERT در SQL استفاده میکنیم.
1CREATE TABLE Student(
2 RollNo int PRIMARY KEY,
3 Name VARCHAR(100) NOT NULL,
4 Gender TEXT NOT NULL;
5 Subject VARCHAR(30),
6 MARKS INT (3)
7);
8
9INSERT INTO Student VALUES (1, Vaibhav, M, Mathematic, 100);
10INSERT INTO Student VALUES (2, Vishal, M, Physics, 79);
11INSERT INTO Student VALUES (3, Saumya, F, Chemistry, 95);
12INSERT INTO Student VALUES (4, Arun, M, English, 78);
13INSERT INTO Student VALUES (5, Anjum, F, Hindi, 83);
14INSERT INTO Student VALUES (6, Radhika, F, Biology, 57);
15INSERT INTO Student VALUES (7, Harpreet, F, Physical Education, 68);
16
17SELECT * FROM Student;
بعد از اجرای کد بالا، جدول زیر در پایگاه داده ساخته شده و قابل مشاهده است.
RollNo | Name | Gender | Subject | Marks |
1 | Vaibhav | M | Mathematics | 100 |
2 | Vishal | M | Physics | 79 |
3 | Saumya | F | Chemistry | 95 |
4 | Arun | M | English | 78 |
5 | Anjum | F | Hindi | 83 |
6 | Radhika | F | Biology | 57 |
7 | Harpreet | F | Physical Education | 68 |
مثال اول: حذف تمام رکوردها
در مثال اول، میخواهیم که همه ردیفهای جدول حذف شوند. بنابراین از دستور TRUNCATE TABLE بر روی جدول student ساخته بالا استفاده میکنیم. روش استفاده از این دستور در کوئری نوشته شده به شکل زیر است.
1TRUNCATE TABLE Student;
2SELECT * FROM Student;
بعد از اجرای کد بالا و دستور Turncate، پیغام No Data Found در خروجی نمایش داده میشود.
مثال دوم: حذف بخش خاصی از رکوردها
در دومین مثال میخواهیم که از دستور Turncate در SQL بر روی بخش خاصی از جدول استفاده کنیم. یعنی فقط دادههای ستونهای خاصی را حذف کنیم. این کار به دو صورت انجام میشود.
- حذف دادههای ستون مشخص شده
- حذف دادههای محدوده مشخص شدهای از ستونها
در کادر زیر، کدهای این مثال را برای هردو صورت بالا پیادهسازی کردهایم. هدف از این مسئله این است که دادههای مربوط به ستون اول و ستونهای سه تا پنج حذف شوند.
1TRUNCATE TABLE Student
2WITH PARTITIONS (1, 3 TO 5);
بعد از اجرای کد بالا بر روی جدولی که در قسمت قبل ساخته بودیم، جدول student به شکل زیر در میآید.
RollNo | Name | Gender | Subject | Marks |
NULL | Vaibhav | NULL | NULL | NULL |
NULL | Vishal | NULL | NULL | NULL |
NULL | Saumya | NULL | NULL | NULL |
NULL | Arun | NULL | NULL | NULL |
NULL | Anjum | NULL | NULL | NULL |
NULL | Radhika | NULL | NULL | NULL |
NULL | Harpreet | NULL | NULL | NULL |
حذف کردن همه ردیف ها با استفاده از دستور DELETE در SQL
با استفاده از دستور DELETE در SQL نیز میتوان همه ردیفها را از جدول حذف کرد، بدون اینکه به ساختار جدول، ویژگیهای آن و ایندکسهای SQL اثری گذاشته شود.
در کادر زیر، کوئری مربوط به حذف همه ردیفها را نمایش دادهایم.
استفاده از دستور DELETE نیز شامل ریزهکاریها و نکات فنی خاصی میشود که به عنوان توسعهدهنده حرفهای بهتر است با آنها آشنا شوید. در مجله فرادرس تلاش کردیم که با سادهترین زبان و مثالهای کاربردی تمام نکات مربوط به این دستور را در مطلب دستور Delete در SQL – از کاربرد تا نحوه استفاده به زبان ساده جمعآوری کرده و به مخاطبان مجله ارائه دهیم.
محدودیت های استفاده از دستور Turncate در SQL
برای استفاده از دستور Turncate بر روی جدولهای SQL نیز باید قوانین مشخصی را رعایت کنیم. در فهرست زیر محدودیتهای موجود در زمان استفاده از دستور Turncate در SQL را بیان کردهایم. یعنی در صورت برقرار بودن هر کدام از شرطهای پایین مجاز به استفاده دستور Turncate نیستیم.
- اگر از محدودیت EDGE برای اشاره به جدول استفاده شده باشد.
- اگر از محدودیت «کلید خارجی» (FOREIGN KEY) برای ارجاع به جدول استفاده شود.
- وقتی که جدول با استفاده از عبارت «ساخت جدول خارجی» (CREATE EXTERNAL TABLE) تعریف شده است.
- و اگر درون یکی از تراکنشهای پایگاه داده از فرمان «مجاز نبودن» ( Not Allowed) استفاده شده باشد.
مقایسه دستورهای TRUNCATE و DELETE در SQL
برای مقایسه این دو دستور باید اشاره شود که عبارت TRUNCATE TABLE نسبت به دستور DELETE دارای مزایای زیر است.
- عبارت دستوری TRUNCATE TABLE همه ردیفهای موجود در جدول را حذف میکند. در زمان استفاده از این دستور امکان به کار بردن دستور Where وجود ندارد.
- دستورات DDL دقیقا همان کاری را میکنند که باید انجام دهند.
- برای حذف همه دادهها، فرمان TRUNCATE TABLE، جدول و صفحه مربوط به آن را قفل میکند.
- دستور TRUNCATE به ازای هر ردیفی که حذف میکند، وقت خود را برای نوشتن گزارش تلف نمیکند. در واقع گزارشات مربوط به ردیفهای حذف شده را ثبت نمیکند.
- بنابراین سرعت اجرای عملیات توسط دستور TRUNCATE بیشتر از سرعت دستور DELETE است.
- دستور DELETE همه ردیفها را یک به یک حذف کرده و گزارش مربوط به هر ردیف را نیز در فایل گزارشات تراکنشها ثبت میکند. اما دستور TRUNCATE دادهها را از طریق جابهجا کردن صفحات مربوط به آن دادهها پاک میکند. از این صفحهها برای ذخیرهسازی اطلاعات جدول استفاده میشود. تنها چیزی که در این حالت در فایل گزارش تراکنشها ثبت میشود، جابهجایی صفحه است.
- جدول بعد از استفاده از دستور DELETE، هنوز شامل صفحات خالی است. در جدولهای Heap – جایی که دادهها بدون داشتن نظم خاصی نگهداری میشوند – نمیتوان این صفحات خالی را حذف کرد، مگر اینکه از قفل مخصوص جدول استفاده شود. اگر عملیات DELETE از این قفل استفاده نکند، جدول دارای چندین صفحه خالی میشود. به ازای ایندکسها هم ممکن است که صفحات خالی بهجا بمانند، اما معمولا این صفحات را میتوان به سرعت مدیریت کرد.
در جدول زیر، تعداد دیگری از تفاوتهای این دو دستور را به صورت خلاصه با یکدیگر مقایسه کردهایم.
TRUNCATE TABLE | DELETE TABLE |
از نوع دستورات DDL است. | از نوع دستورات DML است. |
بدون استفاده از عبارت WHERE تمام ردیفهای جدول را حذف میکند. | با استفاده از عبارت WHERE تمام یا بخشی از ردیفهای جدول را حذف میکند. |
از طریق انتقال صفحه مورد استفاده برای ذخیره دادهها، همه ردیفها را در یک واحد زمانی حذف میکند. | در هر واحد زمانی فقط یک ردیف را حذف میکند. |
قابل استفاده با ویوهای ایندکسگذاری شده نیست. | قابل استفاده با ویوهای ایندکسگذاری شده هست. |
مقدار ستون مربوط به شناسههای ردیفها را به مقدار اولیه آن تغییر میدهد. یعنی در صورت افزوده شدن داده جدید از اول شمارهگذاری میشود. انگار که کل جدول به تازگی ساخته شده است. | مقدار ستون شناسهها را بدون تغییر باقی میگذارد. |
مجوز مورد نیاز برای اعمال دستور TRUNCATE
برای اعمال دستور TRUNCATE بر روی هر جدول، حداقل به مجوز ALTER نیاز هست. به صورت پیشفرض، فقط نقشهای مشخصی مانند مالک جدول، اعضای گروه Sysadmin که نقش فعال در سرور دارند و نقشهای «DB Owner» و «DBDDL admin» در پایگاه داده دارای مجوز اجرای دستور TRUNCATE TABLE هستند. در ضمن این مجوزها قابل تفویض به دیگران نیستند.
اگرچه کاربران با استفاده از فرمان EXEC در SQL – به صورت EXEC TRUNCATE TABLE - میتوانند عبارت TRUNCATE TABLE را به ماژولی مانند «رویه ذخیره شده» (Stored Procedure) اضافه کرده و سپس مجوزهای ضروری را به آن ماژول اختصاص دهند.
آموزش دوره های مختلف دیتابیس
قواعد زبان SQL بر روی پایگاههای داده مختلفی قابل استفاده است. بعضی از پایگاههای داده مدرن هم از قواعد دیگری مانند NoSQL برای مدیریت دادهها استفاده میکنند. هر کدام از این نرمافزارهای مدیریت داده، کاربردهای مخصوص به خود را دارند. در این بخش از مطلب، چند مورد از فیلمهای آموزشی فرادرس را در ارتباط با انواع پایگاههای داده معرفی کردهایم. هر توسعهدهندهای بنابر نیاز شخصی یا تقاضای شغلی، شاید احتیاج داشته باشد که کار با پایگاه داده خاصی را بیاموزد. به همین دلیل در فرادرس فیلمهای زیر را تولید و منتشر کردهایم. بخصوص پیشنهاد میکنیم دورههای مربوط به MySQL و PostgreSQL را تماشا کرده و فرا بگیرید.
در صورت تمایل به آشنایی با موارد بیشتر هم میتوانید بر روی تصویر زیر کلیک کرده و وارد صفحه اصلی این مجموعه آموزش شوید.
جمعبندی
دستور Truncate به طور خاصی سریعتر از دستور DELETE عمل میکند. بنابراین یکی از بهترین گزینههای حذف تمام دادهها از جدولهای پایگاه داده، مخصوصا جدولهای موقتی است. دستور Truncate برعکس دستور drop در SQL که کل ساختار جدول را حذف میکند، ساختار و ویژگیهای جدول را برای استفادههای احتمالی آینده نگهمیدارد. بنابراین از آنجا که حذف جدول یا پایگاه داده با استفاده از دستور DROP برگشتپذیر نیست، باید بسیار با دقت استفاده شود. برای استخراج ردیفها از درون جدول هر دو دستور Delete و Truncate به خوبی عمل میکنند.
در استفاده از دستور Truncate نیز باید احتیاط کرد. زیرا این دستور همه دادههای جدول را بدون ذخیره هیچ گزارش مجزایی حذف میکند. در این مطلب از مجله فرادرس به صورت خلاصه ولی کامل درباره دستور Turncate در SQL و روش استفاده از آن صحبت کردهایم. همچنین تفاوتهای این دستور را با دستور DELETE بیان کردیم.
source