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

MySQL UPDATE giảm giá trị 10 cho ID cụ thể?

Giải pháp: UPDATE với phép toán số học

MySQL cho phép dùng biểu thức toán học trực tiếp trong clause SET.

Ví dụ minh họa

Tạo bảng và dữ liệu

mysql> CREATE TABLE DemoTable (
    Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Score INT
);

mysql> INSERT INTO DemoTable(Score) VALUES(67), (78), (90), (56);

Dữ liệu gốc

+----+-------+
| Id | Score |
+----+-------+
| 1  | 67    |
| 2  | 78    |
| 3  | 90    |
| 4  | 56    |
+----+-------+

Giảm Score 10 cho Id = 3

mysql> UPDATE DemoTable 
    -> SET Score = Score - 10 
    -> WHERE Id = 3;

Kết quả

+----+-------+
| Id | Score |
+----+-------+
| 1  | 67    |
| 2  | 78    |
| 3  | 80    |  <-- 90 - 10 = 80
| 4  | 56    |
+----+-------+

Các phép toán trong UPDATE

Phép toánVí dụKết quả (Score=90)
CộngSET Score = Score + 10100
TrừSET Score = Score - 1080
NhânSET Score = Score * 1.199
ChiaSET Score = Score / 245
ModuloSET Score = Score % 76

UPDATE nhiều dòng cùng lúc

-- Giảm 10 cho Score > 80
UPDATE DemoTable SET Score = Score - 10 WHERE Score > 80;

-- Tăng 5% cho tất cả
UPDATE DemoTable SET Score = Score * 1.05;

-- CASE điều kiện
UPDATE DemoTable 
SET Score = CASE 
    WHEN Score < 60 THEN Score + 10
    WHEN Score BETWEEN 60 AND 80 THEN Score + 5
    ELSE Score
END;

Lưu ý an toàn

  1. Luôn có WHERE (trừ khi muốn update tất cả)
  2. Test với SELECT trước:
    SELECT Id, Score, Score - 10 AS new_score FROM DemoTable WHERE Id = 3;
  3. Transaction cho cập nhật quan trọng:
    START TRANSACTION;
    UPDATE ...;
    -- Kiểm tra
    COMMIT; -- hoặc ROLLBACK;
  4. Backup trước khi UPDATE hàng loạt

Trả về dòng đã update (MySQL 8.0.20+)

UPDATE DemoTable 
SET Score = Score - 10 
WHERE Id = 3
RETURNING Id, Score;