การอัปเดตคอลัมน์เดียวแบบมีเงื่อนไขด้วย UPDATE และ WHERE
ใช้ UPDATE ระบุคอลัมน์เป้าหมาย พร้อมเงื่อนไข WHERE เพื่อเพิ่มค่า (Increment) เฉพาะแถวที่ตรงเงื่อนไข
รูปแบบคำสั่ง
UPDATE table_name
SET column_name = column_name + increment_value
WHERE condition;
ตัวอย่าง: เพิ่มคะแนน 10 ให้ผู้ที่คะแนนน้อยกว่า 30
1. สร้างตารางและเพิ่มข้อมูล
CREATE TABLE DemoTable (Name VARCHAR(50), Score INT);
INSERT INTO DemoTable VALUES ('Sam', 45), ('Mike', 28), ('Carol', 27), ('David', 67);
2. ดูข้อมูลก่อน
SELECT * FROM DemoTable;
ผลลัพธ์:
+-------+-------+
| Name | Score |
+-------+-------+
| Sam | 45 |
| Mike | 28 |
| Carol | 27 |
| David | 67 |
+-------+-------+
3. อัปเดต: Score + 10 สำหรับ Score < 30
UPDATE DemoTable SET Score = Score + 10 WHERE Score < 30;
ผลลัพธ์การรัน: Query OK, 2 rows affected (0.22 sec) Rows matched: 2 Changed: 2 Warnings: 0
4. ตรวจสอบหลังอัปเดต
SELECT * FROM DemoTable;
ผลลัพธ์:
+-------+-------+
| Name | Score |
+-------+-------+
| Sam | 45 |
| Mike | 38 |
| Carol | 37 |
| David | 67 |
+-------+-------+
การใช้ CASE WHEN ใน UPDATE (หลายเงื่อนไข)
UPDATE DemoTable
SET Score = CASE
WHEN Score < 30 THEN Score + 10
WHEN Score < 50 THEN Score + 5
ELSE Score
END;
การอัปเดตหลายคอลัมน์พร้อมกัน
UPDATE DemoTable
SET Score = Score + 10,
UpdatedAt = NOW()
WHERE Score < 30;
ข้อควรระวัง
- WHERE clause สำคัญมาก: ขาด WHERE = อัปเดตทุกแถว
- ใช้ Transaction หากสำคัญ:
START TRANSACTION; UPDATE ...; COMMIT; - ทดสอบด้วย SELECT ก่อน:
SELECT * FROM DemoTable WHERE Score < 30; - Rows matched vs Changed: Matched = ตรงเงื่อนไข, Changed = ค่าเปลี่ยนจริง
ประสิทธิภาพ
- Index บนคอลัมน์ใน WHERE (Score) จะช่วยให้เร็วขึ้น
- Batch Update: หากอัปเดตเยอะ ให้แบ่งเป็น Chunk (LIMIT ใน Subquery)