شنبه ۲۲ شهریور ۱۴۰۴

Saturday, September 13, 2025 GMT +3:30

حذف مقادیر از MySQL با دستور DELETE

mysql-delete

مدیریت اطلاعات پایگاه داده به ذخیره (INSERT)، انتخاب (SELECT) و به روزرسانی (UPDATE) ختم نمی شود، دیر یا زود و به دلایل مختلف، سیستم ما نیاز خواهد داشت که مواردی را از دیتابیس حذف نماید، از این رو یکی دیگر از پرس و جوهای (query های) MySQL، دستور حذف ردیف ها با استفاده از DELETE است که در ادامه با آن آشنا خواهیم شد، آشنایی دقیق با این دستور از این لحاظ حائز اهمیت است که اگر در تعیین پارامترهای آن اشتباهی انجام دهیم، ممکن است موجب حذف مواردی ناخواسته شویم.

شیوه نگارش (syntax) دستور DELETE


نحوه استفاده از دستور DELETE در MySQL شباهت زیادی با سایر دستوراتی که تا این لحظه بررسی کرده ایم (مانند SELECT، UPDATE و...) دارد و البته رعایت نکات خاص آن نیز ضروری است، به مثال زیر توجه کنید.
<?php
mysql_query("DELETE FROM table WHERE id = '1'")
or die(mysql_error());
?>
با این دستور ساده، ردیف یا ردیف هایی در دیتابیس که مقادیر ستون id آنها برابر عدد 1 باشد حذف خواهند شد، ملاحظه می کنید که اگر به فرض پارامتر WHERE استفاده نشود یا اینکه به اشتباه تعیین گردد، موجب حذف موارد ناخواسته خواهد شد، لذا در استفاده از دستور DELETE باید دقت نمود و قبل از هر چیز از اطلاعات حساس دیتابیس پشتیبان تهیه کرده و دستورات را نیز قبل از استفاده نهایی، حتی الامکان تست کرد.

یک مثال کاربردی با دستور DELETE


برای آشنایی بیشتر با دستور DELETE، یک مثال کاربردی را با هم مرور می کنیم، فرض کنید در دیتابیس خود در جدول users اسامی و مشخصات کاربران را در ستون های id، name، pass، age و... ذخیره کرده ایم، حال می خواهیم کاربرانی که نام آنها با حرف ب فارسی یا B لاتین شروع می شود را حذف کنیم، بدین منظور خواهیم نوشت:
<?php
$con = mysql_connect("localhost","root","")
or die(mysql_error());

mysql_select_db("test")
or die(mysql_error());

$search_fa = 'ب';
$search_en = 'B';

$delete = mysql_query("DELETE FROM users WHERE name LIKE '$search_fa%' OR name LIKE '$search_en%'")
or die(mysql_error());

mysql_close($con);
?>
توضیح:
- همان طور که ملاحظه می کنید، در دستور DELETE می توانیم از WHERE و پارامترهای وابسته به آن مانند OR ، AND ، LIKE و... استفاده کنیم.
- هنگامی که در کنار دستور DELETE از WHERE و LIKE استفاده می کنیم، باید دقت کنیم که علامت % در ابتدا، انتها یا در هر دو سمت پارامتر، نقشی تعیین کننده در نحوه تفسیر دستورمان خواهد داشت که البته در این مورد در مباحث قبلی صحبت کرده ایم.

حذف مقادیر چندگانه با دستور DELETE


در پایان این آموزش بد نیست یک مثال پیشرفته تر را نیز با هم بررسی کنیم، حتما تا به حال صفحات و سایت هایی را دیده اید که با انتخاب چند مورد، می توان تمام آنها را در یک بار و هم زمان حذف نمود، برای این کار ابتدا یک فرم HTML در نظر می گیریم که مقادیر را به صورت آرایه ارسال کند.
<form action="#" method="post">
<input type="checkbox" name="delete[]" value="1">
<input type="checkbox" name="delete[]" value="2">
<input type="checkbox" name="delete[]" value="3">
<input type="checkbox" name="delete[]" value="4">
<input type="submit" value="ارسال">
</form>
نکته: علامت [] در قسمت نام فیلدها باعث می شود موارد به صورت یک آرایه به سرور ارسال شوند.
سپس در سرور از حلقه های for یا foreach می توانیم استفاده کنیم، به مثال زیر توجه کنید.
<?php
@$delete_array = $_POST['delete'];

$con = mysql_connect("localhost","root","")
or die(mysql_error());

mysql_select_db("test")
or die(mysql_error());

foreach($delete_array as $key => $value){
    $delete = mysql_query("DELETE FROM users WHERE id = '$value' LIMIT 1")
    or die(mysql_error());
}

mysql_close($con);
?>
توضیح:
- برای دریافت متغیر ارسال شده از طرف فرم HTML کافی است از روش های معمول (متد GET یا POST) استفاده کنید.
- اکنون اگر از متغیر delete_array با دستور print_r خروجی بگیرید، کلیدها و مقادیر آرایه به صورت زیر خواهد بود.
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
)
به این ترتیب می توان در یک دستور foreach از کلید و مقدار آرایه ارسال شده در query مربوط به DELETE استفاده کرد.
دسته بندی: آموزش مقدماتی » MySQL
related مطالب بیشتر:
انتخاب ردیف ها با دستور SELECT در MySQL
محدودسازی، گروه بندی و مرتب سازی نتایج در MySQL
توابع تجمیعی (Aggregate Functions) در MySQL
اتصال PHP به MySQL با اکستنشن MySQLi
به روز رسانی ردیف ها در MySQL با UPDATE
دیدگاه
more ۳۴ دیدگاه برای این مطلب ارسال شده است.
more چینش دیدگاه ها به ترتیب از جدیدترین به قدیمی ترین است.
۲۰:۳۳ ۱۳۹۲/۰۶/۲۷
سلام
من میخوام از جدول بازدید چند تا آی پی رو حذف کنم
از این دستور استفاده میکنم ولی تغییری ایجاد نمیشه
DELETE FROM `bazdid` WHERE ip = '***.***.***.***'
مشکل چیه . میشه راهنمایی کنید.
سلام
اگرچه نقطه در MySQL معنی خاصی دارد، اما در حالتی که شما استفاده کرده اید، نباید خطایی رخ دهد، در هر صورت حل مشکل شما نیاز به بررسی و تست کدهای برنامه و دیتابیس به صورت کامل دارد، ممکن است ایراد از موردی جزئی یا به فرض از character set دیتابیس و collate جداول باشد.
۰۰:۰۸ ۱۳۹۲/۰۴/۲۳
عالی بود.
زهرا
۱۰:۱۰ ۱۳۹۱/۱۲/۰۷
با سلام. اگه ممكنه در مورد دستور join در sql و كاربرد آن در mysql توضيح دهيد
سلام
در یک تعریف ساده، از join برای انتخاب از دو یا چند جدول (به جای یک جدول) در هنگام اجرای پرس و جو (query) استفاده می شود، به طور مثال اگر اسامی افراد و سن آنها در یک جدول و میانگین وزن و سن در جدول دیگر باشد، می توان با یک پرس و جو با استفاده از join به فرض میانگین وزن افراد را استخراج کرد!
توضیحات بیشتر در این رابطه را در آموزش های بعد خواهیم گفت.
Mahna
۱۹:۲۸ ۱۳۹۱/۱۲/۰۴
سلام .. واقعا خسته نباشید به خاطر داشتن همچین سایت مفید و کارآمدی...
چندتا سوال داشتم :
‏1. چه جوری می تونم در بالای وبلاگم نوشته هایی رو به صورت متحرک و با سلیقه ی خودم داشته باشم؟ ( مثل زیرنویس تلویزیون) .. کد آن در سرویس دهنده ها موجود است؟ کد را باید در کجای قالب قرار بدهم؟
‏2. در کدام قسمت قالب کد مربوط به بخش نظرات قرار دارد؟ اگر بخواهم به جای "نظر بدهید" از عبارت دیگری استفاده کنم ، کدام قسمت را باید تغییر بدهم؟
‏3: از چه سرویس دهنده ی ابزار وبلاگ استفاده کنم تا امکان درج کدهای اسکریپت در پست ها برای بلاگفا وجود داشته باشد؟
ممنون از راهنماییتون ...
سلام
- برای مورد اول باید از تگ marquee استفاده کنید که آموزش آن در بخش آموزش های کاربردی html وجود دارد، کد را پس از تنظیم در هر جای قالب وبلاگتان (در قسمت ویرایش قالب) می توانید قرار دهید (هر چه بالاتر باشد، خروجی نیز در قسمت بالاتر نشان داده می شود، اگر با کدهای html آشنا نیستید، باید با آزمایش و خطا مکان درست را پیدا کنید).
- کد مربوط به نظرات معمولا در ابتدای کد قالب در پائین تر از تگ head قرار دارد، اگر دقت کنید دقیقا عبارت "نظر بدهید" را در آن خواهید یافت (اگر پیدا نکردید می توانید از قابلیت find در notepad یا مرورگر استفاده کنید)، کافی است متن خود را جایگزین آن کنید.
- متاسفانه این مورد به محدودیت های سرویس دهنده ارتباط دارد و دقیقا نمی دانیم چه سایت هایی از نظر آن مجاز است و چه سایت هایی غیر مجاز و معیار چیست!
more لطفا پیش از ارسال دیدگاه نکات زیر را مد نظر داشته باشید:
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.



 refresh
10 × 10
3 × 9
20 × 20
=