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

سه شنبه 17 اردیبهشت 1392

حذف مقادیر از MySQL با دستور DELETE <br/> مدیریت اطلاعات پایگاه داده به ذخیره (INSERT)، انتخاب (SELECT) و به روزرسانی (UPDATE) ختم نمی شود، دیر یا زود و به دلایل مختلف، سیستم ما نیاز خواهد داشت که مواردی را از دیتابیس حذف نماید،

مدیریت اطلاعات پایگاه داده به ذخیره (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 استفاده کرد.

ایمان مدائنی

نویسنده 1299 مقاله در برنامه نویسان
  • PHP
  • 2k بازدید
  • 1 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید