Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

วิธีอัปเดตคอลัมน์เดียวใน MySQL และเพิ่มค่าตามเงื่อนไข

การอัปเดตคอลัมน์เดียวแบบมีเงื่อนไขด้วย 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)