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

Cập nhật cột trạng thái = 1 cho bản ghi ngày hết hạn trước hôm nay trong MySQL

UPDATE đặt cờ trạng thái dựa trên so sánh ngày với CURDATE()

Sử dụng UPDATE ... SET flag = 1 WHERE expiry_date <= CURDATE() để đánh dấu các bản ghi đã quá hạn (ngày hết hạn ≤ hôm nay).

1. Tạo bảng và chèn dữ liệu

mysql> CREATE TABLE DemoTable (
    ProductStatus TINYINT(1),
    ProductExpiryDate DATE
);

Giả sử ngày hiện tại: 2019-08-20

mysql> INSERT INTO DemoTable VALUES
    (0, '2019-06-12'), (0, '2019-10-11'), (0, '2018-07-24'), (0, '2018-09-05');

2. Xem dữ liệu ban đầu

mysql> SELECT * FROM DemoTable;
+---------------+-------------------+
| ProductStatus | ProductExpiryDate |
+---------------+-------------------+
| 0             | 2019-06-12        |  ← quá hạn
| 0             | 2019-10-11        |  ← chưa hết hạn
| 0             | 2018-07-24        |  ← quá hạn
| 0             | 2018-09-05        |  ← quá hạn
+---------------+-------------------+

3. Truy vấn: Cập nhật ProductStatus = 1 cho hàng quá hạn

mysql> UPDATE DemoTable
    SET ProductStatus = 1
    WHERE ProductExpiryDate <= CURDATE();

Kết quả: Query OK, 3 rows affected

4. Kiểm tra kết quả

mysql> SELECT * FROM DemoTable;
+---------------+-------------------+
| ProductStatus | ProductExpiryDate |
+---------------+-------------------+
| 1             | 2019-06-12        |
| 0             | 2019-10-11        |
| 1             | 2018-07-24        |
| 1             | 2018-09-05        |
+---------------+-------------------+

Giải thích:

  • CURDATE() = '2019-08-20' (ngày hiện tại)
  • 3 hàng có ExpiryDate ≤ '2019-08-20' → Status = 1
  • 1 hàng ExpiryDate = '2019-10-11' > '2019-08-20' → Status giữ 0

Ứng dụng thực tế:

  • Hệ thống subscription: Đánh dấu gói đã hết hạn
  • Quản lý kho: Đánh dấu hàng hóa quá hạn sử dụng
  • Task management: Đánh dấu task overdue
  • Chạy định kỳ (Event Scheduler / Cron job) mỗi ngày

MySQL Event tự động chạy hàng ngày:

CREATE EVENT update_expired_status
ON SCHEDULE EVERY 1 DAY
DO UPDATE DemoTable SET ProductStatus = 1 WHERE ProductExpiryDate <= CURDATE();