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

Cộng 1 vào giá trị hiện có trong MySQL (UPDATE +1)

Cú pháp đơn giản

UPDATE bang SET cot = cot + 1 WHERE dieu_kien;

Ví dụ: Cộng 1 cho các giá trị >= 20

Dữ liệu ban đầu

+-------+
| Value |
+-------+
| 10    |
| 13    |
| 15    |
| 16    |
| 20    |
| 40    |
| 50    |
| 55    |
| 56    |
+-------+

Truy vấn

mysql> UPDATE Add1ToExistingValue SET Value = Value + 1 WHERE Value >= 20;

Kết quả

+-------+
| Value |
+-------+
| 10    |
| 13    |
| 15    |
| 16    |
| 21    |  -- 20+1
| 41    |  -- 40+1
| 51    |  -- 50+1
| 56    |  -- 55+1
| 57    |  -- 56+1
+-------+

Các biến thể

  • Cộng hằng số khác: cot = cot + 5
  • Cộng giá trị cột khác: cot1 = cot1 + cot2
  • Tăng dần theo thứ tự: Dùng biến @seq := @seq + 1 (xem bài 1003073308)
  • Cộng có điều kiện phức tạp: cot = cot + CASE WHEN ... THEN 1 ELSE 0 END

Atomic increment (đồng thời an toàn)

UPDATE đơn lẻ trong MySQL là atomic. Tuy nhiên, nếu đọc rồi ghi (SELECT ... UPDATE) cần transaction:

START TRANSACTION;
SELECT Value FROM bang WHERE id=1 FOR UPDATE;
UPDATE bang SET Value = Value + 1 WHERE id=1;
COMMIT;

Generated Column (MySQL 5.7+)

ALTER TABLE bang ADD COLUMN value_plus_1 INT GENERATED ALWAYS AS (Value + 1) VIRTUAL;

Mẹo: Dùng Value = Value + 1 thay vì đọc ra tính toán rồi update - hiệu năng tốt hơn, tránh race condition.