دستور DELETE
درس «Delete Statements» از دوره آموزشی SQL Server به بررسی کاربرد دستور DELETE برای حذف رکوردها از جداول پایگاه داده میپردازد. این آموزش با توضیح ساختار کلی دستور DELETE و تفاوت آن با Truncate Table آغاز میشود و سپس مفاهیم کلیدی مانند استفاده از شرط WHERE برای حذف انتخابی دادهها، جلوگیری از حذف اشتباه رکوردها، و مدیریت وابستگیهای کلید خارجی (Foreign Key Constraints) را پوشش میدهد. در ادامه، نکاتی پیرامون بهینهسازی عملکرد در حذف دادهها، شناسایی محدودیتها، و رعایت استانداردهای ایمنی در مدیریت دادهها ارائه میشود. این درس با هدف آموزش کامل و عملی کار با DELETE، به متخصصان کمک میکند تا در پروژههای واقعی از این دستور بهدرستی و با دقت استفاده کنند.
در این جلسه ما میخواهیم نشان بدهیم که چطور از یک جدول، سطرها رو پاک کنیم و اینکه چطور یک یا چند سطر رو به کل از یک جدول با استفاده از دستور DELETE پاک کنیم.
بنابراین دوباره با جدول humanresources.department کار میکنیم و ما میتوانیم یک جدول با یک دستور select از جداول ذخیره شده رو به سرعت داشته باشیم و اون رو مشاهده کنیم.
زمانی که ما دستورمان را برای مشاهده سطرهای جدول، همانطور که در درسهای قبل دیدیم با گزینه execute اجرا میکنیم، میبینیم که همه سطرهای موجود و تعریف شده در جدول را به ما برمیگرداند. از جمله یکی در پایین وجود دارد که الان ما اون رو میبینیم و اگر یادتان باشد ما در چند درس تمرینی عقبتر اون رو اضاف کردیم.
ما رکورد database administrators رو اگر یادتان باشد اضاف کردیم.
ما الان قصد داریم یک کوئری جدید باز کنیم و با دستور DELETE همان رکورد و سطری رو که اضافه کرده بودیم، ایندفعه حذف کنیم.
پس ما از کلمه کلیدی دلیت استفاده میکنیم و بعد از اون دیگر نباید هیچ ستونی رو مثل کاری که برای اجرای بقیه دستورات درس های قبلی انجام میدادیم، مشخص و سفارشی کنیم. عملکرد کلمه کلیدی DELETE بر اساس ستون به ستون کار نمیکند، بلکه تمام سطر رو به صورت یکجا پاک میکند. بنابراین ما نباید مشخص کنیم که کدام ستون باید پاک بشود.
پس ما کافی است یکراست برویم سراغ مشخص کردن بخش from و به پایین میآییم و from humanresources.department رو تایپ میکنیم ولی هنوز اون رو اجرا نمیکنیم.
اگر ما این رو همینطور که هست اجرا کنیم، اون همه سطرها رو از humanresources.department پاک میکند که این چیزی نیست که ما میخوایم.
بنابراین باید بند where رو اضافه کنیم تا سطرهایی که میخواهیم پاک بشوند رو جدا کرده باشیم و با اینکارمان عملیات فیلتر کردن سطرهایی که قصد حذفشان داریم رو انجام بدهیم. این بند where خیلی شبیه بند where ای کار میکند که توی دستور select و update دیدیم.
بنابراین من میخواهم جایی رو پاک کنم که name برابر با database administrators هست و البته نام دقیق سطر باید در تک کوتیشن قرار بگیرد.
بنابراین ما دستور delete from humanresources.department where name= database administrators رو داریم.
پیش میرویم و اون رو اجرا میکنیم.
پیام one row affected رو میبینیم به معنای اینکه کار حذف سطرمان با موفقیت انجام شد.
ما میتوانیم به دستور selectمان برگردیم و دوباره اون رو اجرا کنیم، اگر به سمت پایین حرکت کنیم، میبینیم که دیگر این رکورد اینجا وجود ندارد.
دقیقاً همان چیزی که میخواستیم.
دوباره، ساختار ترکیبی دستوری delete نسبتاً ساده است و از همه دستورات از جمله insert و update ساده تر است، چون که نیاز به مشخص کردن ستون خاصی ندارد و نیاز نیست ما به نرم افزار توضیح بدهیم که با چه ستونهایی باید کار بکند. شما همیشه در دستور delete با همه ستونها سر و کار دارید. اگر شما میخواهید مقدار یک ستون رو پاک کنید باید از دستور update استفاده کنید. یک دستور دلیت همیشه کل ستونهای یک سطر رو تحت تأثیر قرار میدهد و فقط برای یک قسمت از سطر نمیتواند اجرا بشود و خواهشاً خواهشاً مواظب باشید که دستور delete رو بدون بند where اجرا نکنید؛ چون بدون بند where همه رکوردهای جدولتان پاک میشوند که اصولاً اون چیزی نیست که شما میخواهید انجام بدهید. بنابراین قبل از صدور بیانیه delete مطمئن بشوید که بند where به درستی مشخص شده.