۱۴۰۴/۰۶/۲۹ Nebular

تفاوت‌های DELETE, TRUNCATE, DROP

تعریف، تفاوت‌ها و مثال‌های واقعی


1️⃣ دستور DELETE

  • برای حذف رکوردها از جدول استفاده می‌شود.
  • می‌توان شرط (WHERE) گذاشت.
  • رکوردها یکی‌یکی پاک می‌شوند و در Transaction Log ثبت می‌شوند (پس قابل ROLLBACK هست).
  • ساختار جدول (ستون‌ها، کلیدها، ایندکس‌ها) باقی می‌ماند.

🔹 مثال:

-- حذف همه رکوردهای جدول
DELETE FROM Products;

-- حذف فقط محصولات با قیمت کمتر از 100
DELETE FROM Products WHERE Price < 100;

📌 نکات:

  • اگر شرط نگذاریم → همه رکوردها حذف می‌شوند.
  • Identity ستون‌ها (مثل ID که AUTO INCREMENT است) ریست نمی‌شود.

2️⃣ دستور TRUNCATE

  • تمام رکوردهای جدول را خیلی سریع‌تر از DELETE حذف می‌کند.
  • امکان استفاده از شرط (WHERE) وجود ندارد.
  • اطلاعات در Transaction Log به‌صورت مینیمال ذخیره می‌شود (نه رکورد به رکورد).
  • ساختار جدول حفظ می‌شود، ولی Identity ستون‌ها ریست می‌شود.

🔹 مثال:

-- پاک‌سازی کامل جدول
TRUNCATE TABLE Products;

📌 نکات:

  • سریع‌تر از DELETE است.
  • روی جدول‌هایی که کلید خارجی (FOREIGN KEY) دارند قابل استفاده نیست.
  • قابل ROLLBACK هست، اگر داخل Transaction استفاده شود.

3️⃣ دستور DROP

  • کل شیء (Table, View, Database, Index, Procedure, …) را از سیستم حذف می‌کند.
  • داده + ساختار + وابستگی‌ها → کلاً پاک می‌شوند.

🔹 مثال:

-- حذف کامل جدول
DROP TABLE Products;

-- حذف کامل دیتابیس
DROP DATABASE ShopDB;

-- حذف یک View
DROP VIEW MyView;

📌 نکات:

  • بعد از DROP جدول یا دیتابیس دیگه وجود نداره.
  • نمی‌تونیم ROLLBACK کنیم (مگر اینکه داخل Transaction اجرا بشه و قبل از COMMIT باشه).
  • باید خیلی مراقب بود چون بازگشتی نداره.
  • روی جدولی که کلید خارجی داره خطا میده .

4️⃣ دستور ALTER … DROP

  • برای حذف اجزای داخل یک شیء استفاده می‌شود (نه خود شیء).

🔹 مثال:

-- حذف یک ستون از جدول
ALTER TABLE Products DROP COLUMN Description;

-- حذف یک Constraint
ALTER TABLE Orders DROP CONSTRAINT FK_Orders_Customers;

5️⃣ دستور TRUNCATE vs DELETE vs DROP (خلاصه تفاوت‌ها)

ویژگیDELETETRUNCATEDROP
حذف داده‌هابله (با شرط یا همه)بله (همه رکوردها)بله (به همراه ساختار)
شرط WHEREداردنداردندارد
سرعتکندتر (ثبت رکورد به رکورد در Log)سریع‌ترسریع (چون کل شیء پاک می‌شود)
بازگردانی (Rollback)بلهبله (در Transaction)خیر (معمولاً)
حذف ساختار جدولخیرخیربله
ریست Identityخیربله

6️⃣ دستورات مشابه که باید بدونی

علاوه بر این سه دستور، موارد دیگه هم هستند:

  • DROP INDEX → حذف ایندکس
  • DROP PROCEDURE → حذف Stored Procedure
  • DROP FUNCTION → حذف Function
  • DROP TRIGGER → حذف Trigger
  • DROP SCHEMA → حذف Schema
  • DROP USER / LOGIN → حذف یوزر یا لاگین
  • TRUNCATE PARTITION (در نسخه‌های پیشرفته) → پاک‌سازی فقط یک پارتیشن جدول

🔥 مثال ترکیبی:

-- ایجاد یک جدول تستی
CREATE TABLE Employees (
    EmpID INT IDENTITY(1,1) PRIMARY KEY,
    Name NVARCHAR(100),
    Salary INT
);

-- درج رکورد
INSERT INTO Employees (Name, Salary) VALUES ('Ali', 5000), ('Sara', 7000), ('Reza', 6000);

-- حذف یک رکورد خاص
DELETE FROM Employees WHERE Name = 'Ali';

-- پاک‌سازی کل جدول و ریست Identity
TRUNCATE TABLE Employees;

-- حذف کامل جدول
Accept Cookies
Accept Cookies
[your-shortcode]