در MySQL، از دستور DELETE برای حذف یک یا چند رکورد از یک جدول استفاده میشود. این دستور به شما اجازه میدهد دادههای خاصی را از یک جدول حذف کنید.
همچنین، اگر بدون شرط (WHERE) استفاده شود، تمام رکوردهای جدول حذف خواهند شد.
۱. ساختار کلی دستور DELETE
DELETE FROM نام_جدول WHERE شرط;
- نام_جدول: نام جدولی که میخواهید از آن رکورد حذف کنید.
- WHERE شرط: مشخص میکند که کدام رکوردها حذف شوند. اگر این بخش را حذف کنید، تمام رکوردهای جدول حذف خواهند شد!
۲. حذف یک رکورد خاص
برای حذف یک رکورد مشخص از جدول، از WHERE همراه با مقدار موردنظر استفاده میکنیم.
مثال: حذف یک دانشآموز خاص از جدول students
DELETE FROM students WHERE id = 5;
🔹 این دستور رکوردی که id
برابر با ۵ دارد را حذف میکند.
۳. حذف چندین رکورد با یک شرط
میتوان چندین رکورد را با استفاده از شرایط WHERE حذف کرد.
مثال: حذف دانشآموزانی که نمره کمتر از ۱۰ دارند
DELETE FROM students WHERE score < 10;
🔹 این دستور تمام دانشآموزانی را که نمره کمتر از ۱۰ دارند، حذف میکند.
۴. حذف همه رکوردهای یک جدول
اگر دستور DELETE را بدون WHERE اجرا کنیم، تمام دادههای جدول حذف میشوند.
مثال: حذف تمام دادههای جدول students
DELETE FROM students;
🔹 این دستور تمام رکوردهای جدول students
را حذف میکند. اما ساختار جدول حفظ میشود.
نکته مهم: اگر میخواهید جدول کاملاً خالی شود و شمارنده AUTO_INCREMENT
نیز از اول شروع شود، از TRUNCATE
استفاده کنید.
TRUNCATE TABLE students;
✅ این دستور مشابه DELETE
عمل میکند اما سریعتر است و شمارش ID را ریست میکند.
۵. حذف رکوردها بر اساس چندین شرط
میتوان چندین شرط را برای حذف دادهها ترکیب کرد.
مثال: حذف تمام دانشآموزانی که در کلاس 10A
هستند و نمره کمتر از ۱۲ دارند
DELETE FROM students WHERE class = '10A' AND score < 12;
🔹 این دستور فقط دانشآموزانی را حذف میکند که هم در کلاس 10A
باشند و هم نمره کمتر از ۱۲ داشته باشند.
۶. حذف رکوردها با استفاده از LIMIT
اگر بخواهیم فقط تعداد مشخصی از رکوردها حذف شوند، میتوانیم از LIMIT
استفاده کنیم.
مثال: حذف فقط دو دانشآموز با نمره کمتر از ۱۰
DELETE FROM students WHERE score < 10 LIMIT 2;
🔹 این دستور فقط دو رکورد از دانشآموزانی که نمره کمتر از ۱۰ دارند را حذف میکند.
۷. حذف رکوردهای دارای مقدار NULL در یک ستون
گاهی لازم است رکوردهایی که مقدار NULL دارند را حذف کنیم.
مثال: حذف تمام دانشآموزانی که شماره تلفن ندارند
DELETE FROM students WHERE phone IS NULL;
🔹 این دستور دانشآموزانی را که مقدار NULL در ستون phone
دارند، حذف میکند.
۸. استفاده از DELETE همراه با JOIN برای حذف رکوردها
گاهی لازم است رکوردهایی را حذف کنیم که با اطلاعات جدول دیگری مرتبط هستند.
مثال: حذف تمام سفارشهای مربوط به مشتریان غیرفعال
DELETE orders FROM orders
JOIN customers ON orders.customer_id = customers.id
WHERE customers.status = 'inactive';
🔹 این دستور تمام سفارشهای مربوط به مشتریانی که غیرفعال هستند را حذف میکند.
۹. جلوگیری از حذف همه رکوردها (فعال کردن SAFE MODE)
MySQL بهصورت پیشفرض دارای یک حالت ایمن (Safe Mode) است که مانع از اجرای DELETE
بدون WHERE
میشود. اگر بخواهید این محدودیت را غیرفعال کنید، میتوانید از دستور زیر استفاده کنید:
SET SQL_SAFE_UPDATES = 0;
DELETE FROM students;
SET SQL_SAFE_UPDATES = 1;
🔹 این تنظیم باعث میشود که بتوانید بدون WHERE
، تمام رکوردهای یک جدول را حذف کنید.
۱۰. بررسی تعداد رکوردهای حذفشده با ROW_COUNT()
بعد از اجرای دستور DELETE
، میتوان تعداد رکوردهای حذفشده را مشاهده کرد.
DELETE FROM students WHERE score < 10;
SELECT ROW_COUNT();
🔹 مقدار ROW_COUNT() تعداد رکوردهای حذفشده را برمیگرداند.
جمعبندی
- دستور DELETE برای حذف یک یا چند رکورد از یک جدول استفاده میشود.
- اگر
WHERE
مشخص نشود، تمام دادههای جدول حذف خواهند شد. - برای حذف سریعتر تمام دادهها و ریست شدن شمارنده
AUTO_INCREMENT
، ازTRUNCATE
استفاده کنید. - میتوان چندین شرط را با
AND
وOR
ترکیب کرد. LIMIT
برای حذف تعداد مشخصی از رکوردها مفید است.DELETE
را میتوان همراه باJOIN
برای حذف رکوردهای وابسته استفاده کرد.- استفاده از
SAFE MODE
در MySQL مانع از حذف تصادفی تمام دادهها میشود.
✅ با درک این نکات، میتوانید از دستور DELETE بهصورت حرفهای در مدیریت پایگاه داده خود استفاده کنید.