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

สลับค่าในคอลัมน์เฉพาะแถวใน MySQL ด้วย UPDATE WHERE

UPDATE ค่าเฉพาะแถวที่ตรงเงื่อนไข

ใช้ UPDATE ... SET ... WHERE เพื่อเปลี่ยนค่าในคอลัมน์เฉพาะแถวที่ต้องการ ไม่ใช่ Swap ระหว่างสองแถว (ซึ่งซับซ้อนกว่า)

สร้างตารางและข้อมูล

mysql> CREATE TABLE DemoTable1504 (
    -> Id INT,
    -> FirstName VARCHAR(20)
    -> );
Query OK, 0 rows affected (0.83 sec)

mysql> INSERT INTO DemoTable1504 VALUES
    -> (101, 'Chris'), (102, 'Bob'), (103, 'David'), (104, 'Mike');
Query OK, 4 rows affected

ข้อมูลก่อนแก้ไข

+------+-----------+
| Id   | FirstName |
+------+-----------+
|  101 | Chris     |
|  102 | Bob       |
|  103 | David     |
|  104 | Mike      |
+------+-----------+

คำสั่ง: เปลี่ยน FirstName ของ Id=103 จาก David เป็น Carol

mysql> UPDATE DemoTable1504
    -> SET FirstName = 'Carol'
    -> WHERE Id = 103 AND FirstName <> 'Carol';
Query OK, 1 row affected (0.13 sec)
Rows matched: 1  Changed: 1  Warnings: 0

ข้อมูลหลังแก้ไข

+------+-----------+
| Id   | FirstName |
+------+-----------+
|  101 | Chris     |
|  102 | Bob       |
|  103 | Carol     |
|  104 | Mike      |
+------+-----------+

คำอธิบายเงื่อนไข WHERE

  • Id = 103 - ระบุแถวเป้าหมายโดย Primary Key/Unique Key (Best Practice)
  • AND FirstName <> 'Carol' - ป้องกันการ UPDATE ซ้ำ (Idempotent) ถ้ารันหลายครั้ง Rows matched: 1 Changed: 0

⚠️ หากต้องการ Swap ค่าระหว่าง 2 แถว (Swap จริง)

-- สมมติต้องการสลับ FirstName ของ Id=101 และ Id=102
-- วิธี 1: ใช้ Transaction (ปลอดภัย)
START TRANSACTION;
UPDATE DemoTable1504 SET FirstName = 'TEMP_SWAP' WHERE Id = 101;
UPDATE DemoTable1504 SET FirstName = (SELECT FirstName FROM DemoTable1504 WHERE Id = 101) WHERE Id = 102;
UPDATE DemoTable1504 SET FirstName = (SELECT FirstName FROM DemoTable1504 WHERE Id = 102) WHERE Id = 101;
COMMIT;

-- วิธี 2: ใช้ CASE (Single Statement)
UPDATE DemoTable1504
SET FirstName = CASE Id
    WHEN 101 THEN (SELECT FirstName FROM DemoTable1504 WHERE Id = 102)
    WHEN 102 THEN (SELECT FirstName FROM DemoTable1504 WHERE Id = 101)
END
WHERE Id IN (101, 102);

สรุป

  • UPDATE เฉพาะแถว: ใช้ WHERE ระบุ Primary Key
  • เพิ่มเงื่อนไข AND column <> new_value เพื่อ Idempotency
  • Swap จริงระหว่างแถว: ใช้ Transaction หรือ CASE WITH Subquery