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

Điền giá trị cho cột NULL trong MySQL (tính TotalAmount = Price * Quantity)


Giới thiệu

Khi cột tính toán (như TotalAmount) còn NULL, có thể dùng UPDATE với điều kiện IS NULL để điền giá trị tính toán từ các cột khác.

Ví dụ minh họa

Tạo bảng và chèn dữ liệu (TotalAmount NULL)

mysql> CREATE TABLE DemoTable (
    ProductPrice INT,
    ProductQuantity INT,
    TotalAmount INT
);
mysql> INSERT INTO DemoTable (ProductPrice, ProductQuantity) VALUES 
(100, 2), (500, 4), (1000, 10);

Xem dữ liệu trước

mysql> SELECT * FROM DemoTable;
+--------------+-----------------+-------------+
| ProductPrice | ProductQuantity | TotalAmount |
+--------------+-----------------+-------------+
| 100          | 2               | NULL        |
| 500          | 4               | NULL        |
| 1000         | 10              | NULL        |
+--------------+-----------------+-------------+

Cập nhật điền TotalAmount

mysql> UPDATE DemoTable 
SET TotalAmount = (ProductPrice * ProductQuantity) 
WHERE TotalAmount IS NULL;
Query OK, 3 rows affected (0.20 sec)
Rows matched: 3  Changed: 3  Warnings: 0

Kết quả sau

mysql> SELECT * FROM DemoTable;
+--------------+-----------------+-------------+
| ProductPrice | ProductQuantity | TotalAmount |
+--------------+-----------------+-------------+
| 100          | 2               | 200         |
| 500          | 4               | 2000        |
| 1000         | 10              | 10000       |
+--------------+-----------------+-------------+

Mở rộng: Tự động tính với GENERATED COLUMN (MySQL 5.7+)

CREATE TABLE DemoTable (
    ProductPrice INT,
    ProductQuantity INT,
    TotalAmount INT GENERATED ALWAYS AS (ProductPrice * ProductQuantity) STORED
);
  • STORED: Tính và lưu vật lý (tốn dung lượng, đọc nhanh).
  • VIRTUAL: Tính khi đọc (không tốn dung lượng, chậm hơn một chút).
  • Không cần UPDATE, dữ liệu luôn đồng bộ.

Lưu ý

  • Chỉ cập nhật rows WHERE TotalAmount IS NULL để không ghi đè giá trị đã có (nếu có).
  • Dùng COALESCE(TotalAmount, ProductPrice * ProductQuantity) trong SELECT nếu không muốn UPDATE dữ liệu.