دسته بندی مقالات
- بیشتر -محصولات
- بیشتر -آخرین مقالات
- بیشتر --
متغیرها در پایگاه داده SQL
1403/10/12 -
تابع یا Method در سی شارپ
1403/10/12 -
کلاس (Class) در سیشارپ
1403/10/12 -
pivot Table در پایگاه داده SQL Server
1403/10/10 -
شیء گرایی در سی شارپ
1403/10/09 -
جداول موقت در SQL و استفاده از CTE
1403/10/08
دستور DELETE در پایگاه داده sql
مقدمه دستور DELETE در پایگاه داده sql
دستور DELETE یکی از دستورات اصلی زبان SQL است که برای حذف دادهها از جداول در یک پایگاه داده استفاده میشود.
این دستور به کاربران اجازه میدهد رکوردهای مشخصی را براساس شرایط خاص حذف کنند.
این مقاله به طور جامع به دستور DELETE، کاربردهای آن، روشهای مختلف حذف دادهها در SQL Server و نکات مرتبط میپردازد.
دستور DELETE در SQL
دستور DELETE یکی از ابزارهای کلیدی برای مدیریت دادهها در SQL Server است.
درک صحیح از نحوه استفاده، تفاوتها با TRUNCATE، و مدیریت عملکرد و امنیت هنگام حذف دادهها، برای حفظ یکپارچگی و کارایی پایگاه داده ضروری است.
با رعایت نکات و استفاده از روشهای مختلف حذف، میتوانید دادهها را به طور مؤثر و امن مدیریت کنید.
دستور DELETE برای حذف رکوردهای موجود در یک جدول استفاده میشود. ساختار اصلی این دستور به شکل زیر است:
DELETE FROM table_name
WHERE condition;
table_name: نام جدولی است که میخواهید رکوردهای آن را حذف کنید.
condition: شرطی است که مشخص میکند کدام رکوردها حذف شوند.
اگر شرط WHERE در دستور حذف استفاده نشود، تمام رکوردهای جدول حذف خواهند شد.
مثال:
فرض کنید جدولی با نام Employees داریم که شامل اطلاعات کارکنان است.
اگر بخواهید کارکنانی که سن آنها بیش از 50 سال است را حذف کنید، از دستور زیر استفاده میکنید:
DELETE FROM Employees
WHERE Age > 50;
دستور Multirow DELETE در SQL Server
SQL Server به کاربران اجازه میدهد چندین رکورد را به صورت همزمان حذف کنند.
این کار با استفاده از شرایط مناسب در دستور WHERE انجام میشود.
مثال 1: حذف رکوردهای متعدد براساس شرطها
فرض کنید میخواهید کارکنانی که یا بیش از 50 سال دارند یا در بخش "Sales" کار میکنند را حذف کنید:
DELETE FROM Employees
WHERE Age > 50 OR Department = 'Sales';
مثال 2: حذف رکوردها با استفاده از لیستها
با استفاده از عملگر IN میتوانید چند رکورد را براساس یک لیست حذف کنید:
DELETE FROM Employees
WHERE EmployeeID IN (101, 102, 103);
حذف همه رکوردهای یک جدول
برای حذف تمام رکوردهای یک جدول میتوانید از دستور DELETE بدون شرط WHERE استفاده کنید.
اما توجه داشته باشید که این کار بسیار خطرناک است زیرا تمامی دادهها حذف خواهند شد.
مثال:
DELETE FROM Employees;
برای حذف کل دادههای جدول و همچنین بازنشانی شمارندههای هویت (identity columns)، بهتر است از دستور TRUNCATE استفاده کنید که در ادامه توضیح داده خواهد شد.
تفاوت DELETE و TRUNCATE
در SQL Server، هر دو دستور DELETE و TRUNCATE برای حذف رکوردها استفاده میشوند، اما تفاوتهای کلیدی بین آنها وجود دارد:
-
DELETE
امکان استفاده از WHERE دارد، سرعت نسبتاً کند دارد (با توجه به لاگگذاری) ،بازنشانی Identity ندارد،Triggerها اجرا میشوند،نحوه حذف رکورد به رکورد است. -
TRUNCATE
امکان استفاده از WHERE ندارد، سرعت سریع دارد(زیرا لاگگذاری حداقلی انجام میشود)،بازنشانی Identity دارد،Triggerها اجرا نمیشوند،نحوه حذف، حذف کامل دادهها در یک عملیات است.
مثال TRUNCATE
TRUNCATE TABLE Employees;
انواع حذف در SQL Server
-
حذف مستقیم
با استفاده از دستور DELETE رکوردها به صورت مستقیم از جدول حذف میشوند.
-
حذف وابسته
زمانی که یک رابطه FOREIGN KEY با گزینه ON DELETE CASCADE تنظیم شده باشد، حذف رکورد اصلی منجر به حذف رکوردهای وابسته میشود.
مثال:
CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
CustomerID INT FOREIGN KEY REFERENCES Customers(CustomerID) ON DELETE CASCADE
);
DELETE FROM Customers WHERE CustomerID = 1;
-
حذف مشروط
با استفاده از شروط خاص (WHERE)، رکوردهای خاصی حذف میشوند.
-
حذف تمام رکوردها
با حذف تمام دادهها از جدول (بدون شرط WHERE).
-
حذف فیزیکی و منطقی
حذف فیزیکی دادهها با دستور DELETE یا TRUNCATE انجام میشود، اما حذف منطقی به معنای تغییر وضعیت رکورد (مانند تنظیم یک ستون "IsDeleted") است.
حذف دادهها با استفاده از JOIN
در SQL Server، میتوانید از دستور DELETE به همراه JOIN برای حذف رکوردهایی که با دادههای جدول دیگری مطابقت دارند، استفاده کنید.
مثال:
فرض کنید دو جدول به نامهای Orders و Customers دارید.
اگر بخواهید تمام سفارشهایی که مشتری مربوطه آنها در کشور "Germany" است را حذف کنید:
DELETE O
FROM Orders O
JOIN Customers C ON O.CustomerID = C.CustomerID
WHERE C.Country = 'Germany';
حذف دادهها با استفاده از Subquery
در برخی موارد، ممکن است بخواهید از یک زیرپرسش (Subquery) برای تعیین رکوردهایی که باید حذف شوند، استفاده کنید.
مثال:
فرض کنید میخواهید تمامی کارکنانی که در هیچ پروژهای مشغول به کار نیستند را حذف کنید:
DELETE FROM Employees
WHERE EmployeeID NOT IN (
SELECT EmployeeID
FROM ProjectAssignments
);
🌟 آیا میخواهید به یک متخصص پایگاه داده تبدیل شوید و در دنیای فناوری اطلاعات بدرخشید؟
با دوره آموزشی SQL Server ما، شما میتوانید به راحتی و با روشی عملی، تمام مهارتهای لازم را یاد بگیرید!
این دوره به شما آموزش میدهد که چگونه دادهها را به بهترین شکل مدیریت کنید، گزارشهای قدرتمند بسازید و به تحلیلهای عمیق دست یابید.
با محتوای جذاب و پروژههای واقعی، شما نه تنها تئوری را یاد میگیرید، بلکه تواناییهای عملی خود را نیز تقویت میکنید.
پس فرصت را از دست ندهید! همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آینده شغلی روشنتر بردارید!
همین حالا شروع کنید و به دنیای دادهها بپیوندید!
حذف دادهها با استفاده از محدودیت TOP
در SQL Server، میتوانید با استفاده از کلمه کلیدی TOP تعداد مشخصی از رکوردها را حذف کنید.
مثال:
فرض کنید میخواهید فقط 10 رکورد اول از جدول Employees را حذف کنید:
DELETE TOP (10)
FROM Employees;
نکات مهم درباره DELETE
-
Transaction Management
عملیات DELETE میتواند داخل یک تراکنش قرار گیرد تا در صورت نیاز قابل بازگشت (ROLLBACK) باشد.
مثال:
BEGIN TRANSACTION;
DELETE FROM Employees WHERE Age > 50;
ROLLBACK;
-
Performance
حذف تعداد زیادی رکورد ممکن است عملکرد پایگاه داده را تحت تأثیر قرار دهد.
در چنین شرایطی، حذف دادهها را به صورت دستهای (Batch) انجام دهید.
مثال:
WHILE EXISTS (SELECT 1 FROM Employees WHERE Age > 50)
BEGIN
DELETE TOP (1000) FROM Employees WHERE Age > 50;
END
-
Backup
پیش از اجرای دستورات حذف گسترده، همیشه از دادههای خود نسخه پشتیبان تهیه کنید.
-
Triggerها
دستور DELETE میتواند باعث اجرای Triggerهای مرتبط با حذف شود.
بنابراین، اطمینان حاصل کنید که Triggerها به درستی تنظیم شده باشند.
مثال پروژهمحور دستور DELETE در پایگاه داده sql
مثال پروژهمحور: مدیریت فروشگاه و حذف اطلاعات مربوط به محصولات منقضیشده
فرض کنید در یک فروشگاه آنلاین، جدولی به نام Products داریم که شامل اطلاعات محصولات است.
این جدول دارای ستونهای زیر است:
- ProductID (شناسه محصول)
- ProductName (نام محصول)
- Category (دستهبندی)
- ExpirationDate (تاریخ انقضا)
- Stock (موجودی انبار)
هدف: حذف محصولاتی که تاریخ انقضای آنها گذشته است و موجودی انبار آنها صفر است.
ساخت جدول و درج دادههای نمونه
ابتدا جدول و دادههای نمونه ایجاد میکنیم:
CREATE TABLE Products (
ProductID INT PRIMARY KEY,
ProductName NVARCHAR(100),
Category NVARCHAR(50),
ExpirationDate DATE,
Stock INT
);
INSERT INTO Products (ProductID, ProductName, Category, ExpirationDate, Stock)
VALUES
(1, 'Milk', 'Dairy', '2024-01-01', 0),
(2, 'Cheese', 'Dairy', '2023-12-01', 5),
(3, 'Yogurt', 'Dairy', '2023-11-15', 0),
(4, 'Apple', 'Fruits', '2024-02-01', 10),
(5, 'Banana', 'Fruits', '2023-12-10', 0);
دستور DELETE برای حذف محصولات منقضیشده و بدون موجودی
اکنون دستور زیر را اجرا میکنیم تا محصولات منقضیشده و بدون موجودی از جدول حذف شوند:
DELETE FROM Products
WHERE ExpirationDate < GETDATE() AND Stock = 0;
توضیح دستور
ExpirationDate < GETDATE(): شرطی که محصولات با تاریخ انقضای قبل از امروز را انتخاب میکند.
Stock = 0: شرطی که محصولات بدون موجودی انبار را انتخاب میکند.
این دو شرط با AND ترکیب شدهاند تا فقط رکوردهایی حذف شوند که هر دو شرط برقرار باشد.
دوره های مرتبط
آموزش پایگاه داده SqlServer
پایگاه داده Sqlserver یکی از پایگاه داده های مهم برای ذخیره اطلاعات محسوب میشود .