UPDATE: تغییر مقدار ردیفهای موجود
ساختار پایه
UPDATE students SET grade = 11 WHERE full_name = N'رضا کریمی';
بیا این را روی یک جدول کوچک امتحان کنیم:
WHERE دقیقاً مشخص کرد کدام ردیف باید تغییر کند.⚠️ خطرناکترین اشتباه: فراموشکردن WHERE
اگر WHERE را ننویسی، UPDATE بدون هیچ هشداری، همهی ردیفهای جدول را تغییر میدهد. این یکی از رایجترین علتهای واقعی خرابی داده در دنیای واقعی است. بیا این را — بهصورت کاملاً امن، چون فقط در همین Playground موقت اتفاق میافتد — با چشم خودت ببینی:
روش امن: همیشه اول با SELECT پیشنمایش بگیر
یک عادت حرفهای بسیار مهم: پیش از اجرای واقعیِ UPDATE، همان شرط WHERE را با یک SELECT امتحان کن تا ببینی دقیقاً کدام ردیفها تحتتأثیر قرار میگیرند:
-- قدم ۱: اول پیشنمایش بگیر SELECT * FROM students WHERE grade = 9; -- قدم ۲: اگر نتیجه درست بود، همان WHERE را در UPDATE هم بگذار UPDATE students SET grade = 10 WHERE grade = 9;
بهروزرسانی بر اساس مقدار فعلی
SET میتواند به مقدار فعلی همان ستون ارجاع بدهد — مثلاً برای اعمال تخفیف روی قیمتها:
-- ۱۰٪ تخفیف روی همهی محصولات دستهی «نوشتافزار» UPDATE sales SET price = price * 0.9 WHERE category = N'نوشتافزار';
بیا امتحان کنیم:
بهروزرسانی بر اساس یک جدول دیگر (UPDATE ... FROM)
گاهی مقداری که باید در ستونی بگذاری، از یک جدول دیگر میآید — مثلاً قیمتهای تازهای که در یک جدول موقت (Staging) آماده شدهاند. برای این کار از UPDATE ... FROM استفاده میشود:
-- در SQL Server واقعی: UPDATE p SET p.price = s.new_price FROM products p INNER JOIN price_updates s ON p.id = s.product_id;
UPDATE ... FROM پشتیبانی میکند، اما با نحوی کمی متفاوت — بدون تکرار جدول هدف در FROM، و شرط اتصال در WHERE نوشته میشود، نه ON:-- معادل در SQLite (همین Playground): UPDATE products SET price = price_updates.new_price FROM price_updates WHERE products.id = price_updates.product_id;
بیا امتحان کنیم:
price_updates یک ردیف مطابق داشت، قیمتش تغییر کرد؛ «ماوس» که در جدول موقت نبود، دستنخورده ماند. این دقیقاً همان الگویی است که در درس بعدی (MERGE) کاملتر میشود.جمعبندی این درس
UPDATE table SET col = value WHERE condition;فقط ردیفهای منطبق باWHEREرا تغییر میدهد.- هرگز
UPDATEبدونWHEREاجرا نکن، مگر اینکه واقعاً بخواهی همهی ردیفها تغییر کنند. - عادت کن پیش از
UPDATE، همان شرط را باSELECTپیشنمایش بگیری. SET col = col ± valueبرای تغییر بر اساس مقدار فعلی همان ستون کاربرد دارد.UPDATE ... FROMاجازه میدهد مقدار جدید از یک جدول دیگر بیاید؛ نحو SQL Server و SQLite کمی متفاوت است.
در درس بعدی سراغ DELETE میرویم — با همان احتیاطی که همین حالا دربارهی WHERE یاد گرفتیم، اینبار برای حذف ردیف.