فصل 9 از 24 درس 1 از 1

UPDATE و DELETE

UPDATE و DELETE

بخشی از آموزش جامع SQL Server

محتوای درس UPDATE و DELETE

T-SQL | Safe Data Modification و OUTPUT

UPDATE و DELETE مستقیم داده موجود را تغییر می‌دهند و اشتباه در WHERE می‌تواند دامنه بزرگی از Rowها را تحت تأثیر قرار دهد. الگوی امن با Preview، Transaction و بررسی @@ROWCOUNT ریسک عملیاتی را کاهش می‌دهد.

متن این فصل با رویکرد مرجع فنی و قابل استفاده در پروژه واقعی تنظیم شده است؛ مثال‌ها در امتداد مدل StoreDb نوشته شده‌اند و اصطلاحات اصلی SQL Server و T-SQL به‌صورت یکدست به‌کار می‌روند.

1. مفاهیم و قراردادهای اصلی

UPDATE و DELETE مستقیم داده موجود را تغییر می‌دهند و اشتباه در WHERE می‌تواند دامنه بزرگی از Rowها را تحت تأثیر قرار دهد. الگوی امن با Preview، Transaction و بررسی @@ROWCOUNT ریسک عملیاتی را کاهش می‌دهد.

در طراحی پایگاه داده، Syntax تنها بخشی از مسئله است. نوع داده، Constraint، الگوی دسترسی، Transaction و هزینه اجرای Query باید هم‌زمان با نیاز Domain در نظر گرفته شوند.

مفهومکارکرد
UPDATEتغییر Row
SETمقادیر جدید
DELETEحذف Row
WHEREمحدوده هدف
OUTPUTثبت داده تغییرکرده
@@ROWCOUNTتعداد Rowهای اثرگرفته

2. ساختار و Syntax پایه

پیش از تغییر گسترده، Predicate با SELECT اجرا می‌شود. در عملیات حساس، Transaction باز می‌شود و نتیجه پیش از COMMIT بازبینی می‌شود.

-- Preview
SELECT Id, Name, Price
FROM dbo.Products
WHERE Sku = N'LAP-001';

-- Update
UPDATE dbo.Products
SET Price = 88000000
WHERE Sku = N'LAP-001';

3. سناریوی StoreDb

حذف Order تنها زمانی مجاز است که Ruleهای Domain و Foreign Keyها اجازه دهند. برای حذف نرم، IsActive یا DeletedAt می‌تواند جای DELETE فیزیکی را در برخی مدل‌ها بگیرد.

نمونه‌های این فصل بر مدل فروشگاهی StoreDb بنا شده‌اند تا ارتباط مفاهیم میان فصل‌ها حفظ شود و Queryها در یک Context یکپارچه قابل بررسی باشند.

BEGIN TRANSACTION;

DELETE FROM dbo.ProductTags
OUTPUT DELETED.ProductId, DELETED.TagId
WHERE ProductId = 42;

SELECT @@ROWCOUNT AS DeletedRows;

COMMIT;

4. اصول طراحی و Performance

طراحی پایدار باید هم صحت داده و هم هزینه اجرای عملیات را پوشش دهد. انتخاب ساده‌تر زمانی ترجیح دارد که Contract داده را روشن‌تر و رفتار Optimizer را قابل پیش‌بینی‌تر نگه دارد.

  • Preview شرط تغییر قبل از DML انجام شود.
  • Transaction برای تغییرات چندمرحله‌ای استفاده شود.
  • Soft Delete تنها در صورت نیاز Domain طراحی شود.
  • Audit برای تغییرات حساس مستقل از Log معمولی باشد.

5. خطاهای رایج و نکات ایمنی

دستورهای SQL می‌توانند مستقیماً داده و ساختار را تغییر دهند؛ بنابراین بازبینی Context، تعداد Rowهای هدف و اثر Transaction قبل از اجرای تغییرات اهمیت عملی دارد.

  • UPDATE یا DELETE بدون WHERE ناخواسته.
  • COMMIT قبل از بررسی تعداد Rowها.
  • حذف Parent بدون تحلیل Childها.
  • Soft Delete بدون Filter سراسری و Index مناسب.

6. چک‌لیست نهایی فصل

  • Predicate پیش از DML تست می‌شود.
  • @@ROWCOUNT در عملیات حساس بررسی می‌شود.
  • Transaction و Rollback Plan وجود دارد.
  • رفتار Foreign Key هنگام حذف مشخص است.

7. جمع‌بندی

خروجی این فصل باید به تصمیمی قابل اتکا در طراحی یا Query منجر شود؛ صحت داده، قابلیت نگهداری و رفتار Performance سه معیار ثابت برای ارزیابی نمونه‌ها هستند.