حذف مقادیر از 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
برچسب ها: MySQL

ساخت دیتابیس، جدول و ستون با دستور CREATE در MySQL
استفاده از WHERE در پرس و جوی MySQL
استفاده از JOIN و ساخت پرس و جوی ترکیبی در MySQL
آموزش MySQL، سیستم مدیریت پایگاه داده
توابع تجمیعی (Aggregate Functions) در MySQL
دیدگاه


amir
۰۱:۴۸ ۱۳۹۹/۰۴/۰۷
سلام من اگه بخوام با وارد کردن یه id داخل یک text کل اون ردیف پاک بشن باید چه کنم مثلا یک text دریافت میکنم مثلا اون 23 باشه الان باید کل ردیف 23 پاک بشه
با فرض اینکه هر ردیف یک ستون با نام id داشته باشند می توانید مقادیر ارسال شده از فرم HTML را با متد POST یا GET (بسته به متدی که در قسمت action تگ form تنظیم کرده ایم) دریافت کرده و در پرس و جوی DELETE قرار دهیم، مثال:
<input type="text" name="input_id" value="1">
@$id = $_POST['input_id'];
DELETE FROM table WHERE id = '$id' LIMIT 1
نکته مهم در اینجا رعایت بحث امنیت دیتابیس است، با توجه به اکستنشن مورد استفاده باید روش متناسب را روی پارامترهای دریافتی از سمت کاربر انجام دهیم (این آموزش قدیمی است و از اکستنشن MySQL استفاده می کند، برای پروژه های جدید MySQLi یا PDO توصیه می شود که در آموزش های مقدماتی MySQL در این خصوص صحبت کرده ایم، آموزش های قدیمی به مرور در حال ویرایش و به روزرسانی بر اساس اکستنشن های جدید هستند).۰۲:۳۹ ۱۳۹۹/۰۷/۰۷
سلام و عرض ادب.
سایت من هک شده و یک کد ریدایرکت تو دیتابیس هاستم بارگزاری شده
حالا من سوالم اینه که میشه از طریق این کدها تو phpmyadmin از طریق sql اون کد ردایرکت را حذف کرد؟؟؟؟
سایت من هک شده و یک کد ریدایرکت تو دیتابیس هاستم بارگزاری شده
{script src='http//sbono.declarebusinessgroup.gam.jsn=ns1' type='textjavascript'script}
که آخر همه پست ها تو بخش wp_posts دیده میشه.حالا من سوالم اینه که میشه از طریق این کدها تو phpmyadmin از طریق sql اون کد ردایرکت را حذف کرد؟؟؟؟
دستور DELETE کل ردیف را حذف می کند، برای ایجاد تغییر در بخشی از محتوای ستون مورد نظر می توانیم از دستور UPDATE به صورت نمونه زیر (جدول فرضی posts ستون post) استفاده کنیم:
UPDATE posts SET post = REPLACE(post, '{script src=\'http//sbono.declarebusinessgroup.gam.jsn=ns1\' type=\'textjavascript\'script}', '') WHERE post LIKE '%{script src=\'http//sbono.declarebusinessgroup.gam.jsn=ns1\' type=\'textjavascript\'script}%'
نکته مهم: ایجاد تغییرات در این حالت بدون بازگشت است و باید حتما قبل از انجام هرگونه تغییری از اطلاعات دیتابیس پشتیبان تهیه شود.بهاره هوشمندی
۰۰:۴۸ ۱۴۰۲/۰۸/۱۷
با سلام و درود استاد بزرگوار
یه مشکل برام پیش اومده توی مطالب ارسالی سایت محتوایی به این صورت به متن ها اضافه شده
وگرنه مجبورم تک به تک ویرایش و حذف کنم
با تشکر از شما
یه مشکل برام پیش اومده توی مطالب ارسالی سایت محتوایی به این صورت به متن ها اضافه شده
موضوعات مرتبط: * (چهارم ابتدایی) *، فارسی
موضوعات مرتبط: * (پنجم ابتدایی) *، ریاضی
که زیاد هستند و بخوام دونه به دونه حذف کنم زمان زیادی طول می کشه بصورت html محتوا اینطوری میشه<br>موضوعات مرتبط: <a rel='nofollow' href="/category/4">* (چهارم ابتدایی) *</a>، <a rel='nofollow' href="/category/24">فارسی</a><br><br>
خیلی زیادن متاسفانه میخواستم بدونم میشه از طریق sql اینارو با دستوری چیزی حذف کرد؟وگرنه مجبورم تک به تک ویرایش و حذف کنم
با تشکر از شما
در برنامه phpMyAdmin با دستور DELETE و تنظیم REGEXP می توانید الگوی دلخواه را قرار دهید، منتها باید ساختار داده های دیتابیس به دقت بررسی شوند تا الگو بدون اشکال باشد و ردیفی اشتباهی حذف نشود یا ردیف های اضافه باقی نمانند، کار کردن با تابع REGEXP نیاز به مهارت و آشنایی قبلی دارد و الگو هم باید دقیق و منطبق با روال داده های موجود در دیتابیس نوشته شود، توصیه می کنیم در صورت استفاده از این راه حل قبل از هر چیز از کل دیتابیس پشتیبان داشته باشید و در درجه دوم قبل از اجرای دستور DELETE با Query مشابه یک دستور SELECT اجرا کنید و ردیف هایی که تحت تاثیر قرار می گیرند را بررسی کنید تا اشتباهی در حذف داده ها اتفاق نیفتد.
https://www.geeksforgeeks.org/mysql-regular-expressions-regexp/
در صورتی که در نوشتن الگو مشکل داشتید یک نمونه از خلاصه اطلاعات دیتابیس را به صورت فایل sql خروجی بگیرید و به آدرس ایمیل ما (موجود در بخش تماس) ارسال کنید تا در فرصت مقتضی بررسی کنیم.آخرین دیدگاه ها

بهاره هوشمندی
سلام استاد خسته نباشید ببخشید باز مزاحم شدم اگه من بخوام از تگ strip_tags استفاده کنم و استثنا قائل بشم استایل های اون...۱۴۰۲/۰۹/۱۰
معراج
سلام من در قدیم سیستم مدیریت محتوا استفاده میکردن که وقتی متغیر بدون محتوا ایجاد میکردی ارور نمیداد و نیازی هم به @ قبلش...۱۴۰۲/۰۹/۰۸
ابوالفضل
سلام استاد وقتتون بخیر مثل همیشه من با یک مشکل بزرگ مواجه شدم و مجدد مزاحمتون میشم من به یک regex نیاز دارم تا...۱۴۰۲/۰۹/۰۶
بهاره هوشمندی
استاد ببخشید وقتی یه متن طولانی رو باهاش چک می کنم اگه تگ span و b داشته باشه چون تگ رو نمی بنده تا...۱۴۰۲/۰۹/۰۲
بهاره هوشمندی
با سلام استاد بزرگوار از لطف و محبت شما بسیار ممنون و سپاسگزارم خیلی عالی بود اینطوری خیلی خوب شد دستتون درد نکنه...۱۴۰۲/۰۹/۰۱
بهاره هوشمندی
با سلام و از شما من این کد رو امتحان کردم واسه متن عادی خوبه و جواب میده ولی واسه متن طولانی که رنگ...۱۴۰۲/۰۹/۰۱
بهاره هوشمندی
با سلام و خسته نباشید استاد بزرگوار آیا راهی وجود داره تفاوت دو تا متن رو با php پیدا کرد؟ مثلا با...۱۴۰۲/۰۸/۳۰
مهراد
سلام در جدول موقعی که عکس رو با php فراخوانی میکنم نمیاره تصویر عکس. لطفا راهنمایی کنید. ۱۴۰۲/۰۸/۱۷
بهاره هوشمندی
با سلام و درود استاد بزرگوار یه مشکل برام پیش اومده توی مطالب ارسالی سایت محتوایی به این صورت به متن ها اضافه شده...۱۴۰۲/۰۸/۱۷
بهاره هوشمندی
با تشکر از شما استاد گرامی پس کد رو باید اینطوری وارد کنم؟ اینطوری واسه من کار می کنه سپاسگزارم از شما...۱۴۰۲/۰۸/۰۹
بهاره هوشمندی
با سلام از لطف و محبت شما بسیار ممنون و سپاسگزارم دست شما درد نکنه لینکهای شما رو بررسی کردم یعنی باید کل کدهایی...۱۴۰۲/۰۸/۰۸
بهاره هوشمندی
با سلام و تشکر از شما من توی یه صفحه خالی هم امتحان کردم و یه amar.html هم توی پوشه root هاست ساختم بازم...۱۴۰۲/۰۸/۰۸
بهاره هوشمندی
با سلام با تشکر از شما من کاری که گفتید رو انجام دادم ولی بازم صفحه لاگین رو که میزنم باز آمارگیر اونو...۱۴۰۲/۰۸/۰۸
بهاره هوشمندی
سلام خسته نباشید من یه کد واسه آمارگیر دارم که جاو هست از سایت وبگذر بعد توی همه صفحه ها فعاله چطوری می تونم...۱۴۰۲/۰۸/۰۷
hossein
سلام وقت شما بخیر کدی هست که بشود با کمک اون، به محض حذف محصول توسط فروشندگان (افزونه دکان)، تصاویر محصول نیز حذف شوند...۱۴۰۲/۰۷/۲۵
hossein
سلام وقت شما بخیر ممنون میشم اگه راهنماییم کنید میخوام کدی در اختیارم بزارید که بتونه برام سقف درصد مدیر را تعیین کنه توی...۱۴۰۲/۰۷/۱۴
در انتظار بررسی: ۱
پاسخگویی به سوالات ممکن است تا ۲۴ ساعت زمان ببرد.
پاسخگویی به سوالات ممکن است تا ۲۴ ساعت زمان ببرد.
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.