دستور Turncate در SQL برای این طراحی شده که همه رکوردهای موجود در جدولی را حذف کند. در حالی که شاید این دستور از لحاظ ظاهری شبیه به دستور DELETE در SQL باشد اما باهم تفاوت‌های مهمی دارند. دستور DELETE هم برای حذف رکورد‌ها از درون جدول‌های پایگاه داده به کار برده می‌شود. در این مطلب تفاوت‌های میان دستور DELETE و Turncate را نیز بررسی و بیان کرده‌ایم. برای کار با پایگاه‌های داده مبتنی بر زبان SQL هم لازم است که با دستورات حرفه‌ای این زبان مانند دستور Turncate آشنا شویم.

فهرست مطالب این نوشته
997696

در این مطلب از مجله فرادرس به صورت کامل به بررسی دستور Turncate در SQL پرداخته‌ و تفاوت‌های آن را با دستور DELETE بیان کرده‌ایم. در ابتدا با توضیح کاملی درباره این دستور شروع کرده و سپس مثال‌های مختلفی را به صورت کدنویسی شده نمایش دادیم. در نهایت هم Turncate را با رقیب اصلی خود که دستور DELETE است مقایسه کرده و شرایط مربوط به مجوز‌ مورد نیاز برای استفاده از آن را بیان کرده‌ایم.

دستور Turncate در SQL چیست؟

دستور Turncate در SQL برای حذف رکورد‌های درون جدول یا بخش خاصی از جدول به کار برده می‌شود. بعد از استفاده دستور Turncate بر روی جدول، حتی با استفاده از ROLLBACK هم دیگر امکان بازیابی داده‌ها وجود ندارد.

این دستور شبیه به فرمان DELETE است، با این تفاوت که از دستور WHERE در SQL استفاده نمی‌کند. مهمترین ویژگی‌های دستور Turncate را در فهرست پایین ارائه داده‌ایم.

  1. «دستور جدول Turncate» یا (TRUNCATE TABLE Command)، یکی از دستورات «زبان تعریف داده» (Data Definition Language | DDL) است.
  2. دستور Turncate در زمان کار Trigger-های SQL را فعال نمی‌کند.
  3. این دستور فقط داده‌های جدول را حذف می‌کند، در حالی که خود جدول با همان تعریف که ایجاد شده به صورت ثابت – ولی خالی – باقی می‌ماند.
  4. عملیات حذف ردیف‌ها با کمک این دستور به شکل کلی و بدون گزارش‌برداری از عملیات حذف هر ردیف به صورت مجزا صورت می‌گیرد. به همین دلیل، اجرای Turncate نسبت به دستور DELETE از سرعت بیشتری برخوردار است.

فیلم های آموزشی پیشرفته SQL در فرادرس

SQL یا «زبان پرس‌ و جوی ساختاریافته» (Structured Query Language)، ابزار تخصصی است که برای کار بر روی پایگاه‌های داده رابطه‌ای استفاده می‌شود. در واقع، از این زبان می‌توان برای ساخت پایگاه داده رابطه‌ای و جداول درون آن استفاده کرد. علاوه بر این کارها، با کمک توابع مهم و کاربردی SQL، مدیران پایگاه داده تسلط بسیار خوبی بر روی تمام داده‌های خود دارند. در حال حاضر SQL یکی از پرکاربردترین زبان‌های اختصاصی برای مدیریت پایگاه‌های داده‌ای در دنیا است. توانایی کار به صورت حرفه‌ای با این پایگاه‌ داده باعث گشوده شدن فرصت‌های شغلی فراوان در مقابل برنامه‌نویسان می‌شود.

مجموعه آموزش SQL Server– مقدماتی تا پیشرفته
«با کلیک بر روی تصویر بالا می‌توانید به صفحه اصلی مجموعه فیلم‌های آموزشی SQL Server هدایت شوید.»

فرادرس به عنوان قوی‌ترین تولیدکننده فیلم‌های آموزشی فارسی، تلاش کرده که تمام زبان‌های برنامه‌نویسی و تکنولوژی‌ها مربوط به مدیریت پایگاه‌ داده را نیز پوشش دهد. به همین دلیل برای آموزش 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 بر روی بخش خاصی از جدول استفاده کنیم. یعنی فقط داده‌های ستون‌های خاصی را حذف کنیم. این کار به دو صورت انجام می‌شود.

  • حذف داده‌های ستون مشخص شده
  • حذف داده‌های محدوده‌ مشخص شده‌ای از ستون‌ها
تصویری از استوانه‌های نمادین پایگاه داده و انفجاری که برای حذف اطلاعات انجام شده است. - دستور 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 از این قفل استفاده نکند، جدول دارای چندین صفحه خالی می‌شود. به ازای ایندکس‌ها هم ممکن است که صفحات خالی به‌جا بمانند، اما معمولا این صفحات را می‌توان به سرعت مدیریت کرد.
مربع‌های آبی بر روی استوانه‌های بنفش میریزند. - دستور Turncate در SQL

در جدول زیر، تعداد دیگری از تفاوت‌های این دو دستور را به صورت خلاصه با یکدیگر مقایسه کرده‌ایم.

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

توسط expressjs.ir