۱۴۰۴/۰۶/۲۹
تفاوتهای 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 (خلاصه تفاوتها)
| ویژگی | DELETE | TRUNCATE | DROP |
|---|---|---|---|
| حذف دادهها | بله (با شرط یا همه) | بله (همه رکوردها) | بله (به همراه ساختار) |
| شرط 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
[your-shortcode]