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

Cách giảm giá trị hàng trong MySQL (UPDATE đơn giản)


Cú pháp cơ bản

Sử dụng UPDATE với phép trừ trực tiếp trên cột:

UPDATE ten_bang SET ten_cot = ten_cot - 1 WHERE dieu_kien;

Ví dụ: Giảm UserScores cho UserId = 103

1. Tạo bảng

mysql> CREATE TABLE IncrementAndDecrementValue ( 
-> UserId INT, 
-> UserScores INT 
-> ); 
Query OK, 0 rows affected (0.60 sec)

2. Chèn dữ liệu

mysql> INSERT INTO IncrementAndDecrementValue VALUES(101,20000); 
Query OK, 1 row affected (0.13 sec) 
mysql> INSERT INTO IncrementAndDecrementValue VALUES(102,30000); 
Query OK, 1 row affected (0.20 sec) 
mysql> INSERT INTO IncrementAndDecrementValue VALUES(103,40000); 
Query OK, 1 row affected (0.11 sec)

3. Dữ liệu gốc

mysql> SELECT * FROM IncrementAndDecrementValue;
+--------+------------+ 
| UserId | UserScores | 
+--------+------------+ 
| 101    | 20000      | 
| 102    | 30000      | 
| 103    | 40000      | 
+--------+------------+ 
3 rows in set (0.00 sec)

4. Giảm 1 cho UserId = 103

mysql> UPDATE IncrementAndDecrementValue 
-> SET UserScores = UserScores - 1 
-> WHERE UserId = 103; 
Query OK, 1 row affected (0.41 sec) 
Rows matched: 1 Changed: 1 Warnings: 0

5. Kết quả

mysql> SELECT * FROM IncrementAndDecrementValue;
+--------+------------+ 
| UserId | UserScores | 
+--------+------------+ 
| 101    | 20000      | 
| 102    | 30000      | 
| 103    | 39999      | 
+--------+------------+ 
3 rows in set (0.00 sec)

Mở rộng: Giảm với điều kiện an toàn (không dưới 0)

UPDATE ten_bang 
SET ten_cot = GREATEST(ten_cot - 1, 0) 
WHERE dieu_kien;

Mở rộng: Giảm giá trị tùy ý

-- Giảm 10
UPDATE ten_bang SET ten_cot = ten_cot - 10 WHERE dieu_kien;

-- Giảm theo tỷ lệ (10%)
UPDATE ten_bang SET ten_cot = FLOOR(ten_cot * 0.9) WHERE dieu_kien;

Ứng dụng thực tế

  • Giảm tồn kho khi bán hàng
  • Giảm số lần thử đăng nhập sai
  • Giảm điểm loyalty khi đổi quà
  • Countdown timer trong game

Lưu ý hiệu năng

  • Index trên cột WHERE (UserId) rất quan trọng
  • Row-level lock (InnoDB) - ít xung đột
  • Batch update: Gom nhiều điều kiện trong 1 câu lệnh CASE WHEN