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

วิธี Bulk Update ข้อมูลใน MySQL ด้วยคำสั่งเดียว (CASE WHEN)

การ UPDATE หลายแถวพร้อมกันด้วย CASE

ใช้ CASE ภายใน SET เพื่อกำหนดค่าใหม่ที่แตกต่างกันไปตามเงื่อนไข ในคำสั่งเดียว

รูปแบบคำสั่ง

UPDATE yourTableName
SET yourUpdateColumnName = CASE yourConditionColumnName
    WHEN Value1 THEN 'UpdatedValue1'
    WHEN Value2 THEN 'UpdatedValue2'
    ...
    ELSE yourUpdateColumnName  -- หรือไม่ระบุ ELSE เพื่อคงค่าเดิม
END
WHERE yourConditionColumnName IN (Value1, Value2, ...);

ตัวอย่าง: สร้างตารางและข้อมูล

mysql> CREATE TABLE UpdateAllDemo (
    -> BookId INT,
    -> BookName VARCHAR(200)
    -> );
Query OK, 0 rows affected (1.18 sec)

mysql> INSERT INTO UpdateAllDemo VALUES(1000,'Introduction to C');
mysql> INSERT INTO UpdateAllDemo VALUES(1001,'Introduction to Java');

ข้อมูลเริ่มต้น

mysql> SELECT * FROM UpdateAllDemo;
+--------+----------------------+
| BookId | BookName             |
+--------+----------------------+
| 1000   | Introduction to C    |
| 1001   | Introduction to Java |
+--------+----------------------+
2 rows in set (0.00 sec)

Bulk Update: เปลี่ยนชื่อหนังสือทั้ง 2 เล่มพร้อมกัน

mysql> UPDATE UpdateAllDemo
    -> SET BookName = CASE BookId
    ->     WHEN 1000 THEN 'C in Depth'
    ->     WHEN 1001 THEN 'Java in Depth'
    -> END
    -> WHERE BookId IN (1000, 1001);
Query OK, 2 rows affected (0.24 sec)

ผลลัพธ์หลังอัปเดต

mysql> SELECT * FROM UpdateAllDemo;
+--------+---------------+
| BookId | BookName      |
+--------+---------------+
| 1000   | C in Depth    |
| 1001   | Java in Depth |
+--------+---------------+
2 rows in set (0.00 sec)

ข้อดีของวิธีนี้:

  • Single query - atomic operation
  • ลด round-trip network latency
  • Transaction safety ดีกว่า multiple updates
  • Performance ดีกว่ามากสำหรับข้อมูลจำนวนมาก

รูปแบบ CASE แบบ Searched (ยืดหยุ่นกว่า):

UPDATE table
SET col = CASE
    WHEN condition1 THEN value1
    WHEN condition2 THEN value2
    ELSE col
END
WHERE condition1 OR condition2;