Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Cách hoán đổi (swap) giá trị một cột cụ thể trong MySQL

Để thay đổi giá trị của một cột cho một hàng cụ thể (ví dụ: sửa tên), dùng câu lệnh UPDATE với điều kiện WHERE chính xác.

Ví dụ: Đổi FirstName của ID=103 từ 'David' thành 'Carol'

Tạo bảng:

mysql> CREATE TABLE DemoTable1504 (
    -> Id INT,
    -> FirstName VARCHAR(20)
    -> );

Chèn dữ liệu:

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

Cập nhật có điều kiện an toàn (chỉ đổi nếu khác giá trị mới):

mysql> UPDATE DemoTable1504
    -> SET FirstName = 'Carol'
    -> WHERE Id = 103 AND FirstName <> 'Carol';

Kết quả:

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

Các trường hợp "swap" phức tạp hơn

1. Hoán đổi giá trị giữa 2 hàng (swap 2 rows)

Cần biến tạm hoặc cập nhật 2 bước:

-- Giả sử swap FirstName của Id=101 và Id=102
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);

2. Hoán đổi 2 cột cùng hàng

UPDATE bang SET cot_a = cot_b, cot_b = cot_a WHERE dieu_kien; -- ❌ SAI: cot_b đã đổi trước

-- ✅ ĐÚNG: dùng biến người dùng
UPDATE bang
SET cot_a = @tmp := cot_a,
    cot_a = cot_b,
    cot_b = @tmp
WHERE dieu_kien;

Lưu ý an toàn

  • Luôn có WHERE chính xác (khóa chính hoặc unique key) để tránh cập nhật nhầm hàng khác.
  • Thêm điều kiện AND cot <> gia_tri_moi để tránh ghi đè vô nghĩa (giảm binlog, trigger).
  • Trong transaction nếu cần rollback khi sai.