ในคำสั่ง UPDATE สามารถตั้งค่าหลายคอลัมน์พร้อมกันได้โดยใช้ SET เพียงครั้งเดียว คั่นด้วยคอมม่า
Syntax
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;
ตัวอย่างการใช้งาน
1. สร้างตารางและเพิ่มข้อมูล
mysql> create table DemoTable1909 ( Id int NOT NULL, FirstName varchar(20), LastName varchar(20) ); Query OK, 0 rows affected (0.00 sec) mysql> insert into DemoTable1909 values(101,'John','Smith'); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1909 values(102,'John','Doe'); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1909 values(103,'Adam','Smith'); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1909 values(104,'David','Miller'); Query OK, 1 row affected (0.00 sec)
ข้อมูลต้นฉบับ:
mysql> select * from DemoTable1909;
+-----+-----------+----------+ | Id | FirstName | LastName | +-----+-----------+----------+ | 101 | John | Smith | | 102 | John | Doe | | 103 | Adam | Smith | | 104 | David | Miller | +-----+-----------+----------+ 4 rows in set (0.00 sec)
2. อัปเดต FirstName และ LastName พร้อมกันที่ Id=103
mysql> update DemoTable1909
-> set FirstName = 'Carol', LastName = 'Taylor'
-> where Id = 103;
Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0
3. ตรวจสอบผลลัพธ์
mysql> select * from DemoTable1909;
+-----+-----------+----------+ | Id | FirstName | LastName | +-----+-----------+----------+ | 101 | John | Smith | | 102 | John | Doe | | 103 | Carol | Taylor | ← เปลี่ยนจาก Adam Smith | 104 | David | Miller | +-----+-----------+----------+ 4 rows in set (0.00 sec)
ข้อดีของ SET เดียวหลายคอลัมน์
- Atomic: อัปเดตทั้งสองคอลัมน์ใน Transaction เดียว ไม่มีโอกาสข้อมูลไม่สอดคล้องระหว่างคอลัมน์
- Performance: เขียน Disk/Log เพียงครั้งเดียว เร็วกว่า UPDATE หลายครั้ง
- Concurrency: Lock แถวเพียงครั้งเดียว ลด Deadlock chance
UPDATE แบบมีเงื่อนไขซับซ้อน (CASE)
UPDATE DemoTable1909
SET
FirstName = CASE WHEN Id = 101 THEN 'NewJohn' ELSE FirstName END,
LastName = CASE WHEN Id = 102 THEN 'NewDoe' ELSE LastName END
WHERE Id IN (101, 102);
สรุป: ใช้ SET col1=val1, col2=val2 ใน UPDATE เดียวเพื่ออัปเดตหลายคอลัมน์พร้อมกัน Atomic, เร็ว, และปลอดภัยกว่า UPDATE หลาย Statement