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

อัปเดต 2 คอลัมน์พร้อมกันใน MySQL ด้วย SET เดียว

ในคำสั่ง 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