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

Tạo bản ghi MySQL có TTL (Time To Live) tự động xóa

Để tạo bản ghi tự động xóa sau một khoảng thời gian (TTL), sử dụng MySQL Event Scheduler.

Các bước thực hiện

1. Bật Event Scheduler

SET GLOBAL event_scheduler = ON;

Hoặc thêm vào my.cnf: event_scheduler = ON

2. Tạo bảng lưu sự kiện

mysql> CREATE TABLE EventDemo (
    -> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> EventDateTime DATETIME
    -> );

Chèn dữ liệu mẫu:

mysql> INSERT INTO EventDemo(EventDateTime) VALUES('2010-09-21');
mysql> INSERT INTO EventDemo(EventDateTime) VALUES('2016-10-27');
mysql> INSERT INTO EventDemo(EventDateTime) VALUES('2018-12-09');
mysql> INSERT INTO EventDemo(EventDateTime) VALUES('2019-03-12');
mysql> INSERT INTO EventDemo(EventDateTime) VALUES('2019-01-04');

3. Tạo Event xóa hàng hết hạn hàng ngày

mysql> DELIMITER //
mysql> CREATE EVENT DeleteDemo
    -> ON SCHEDULE EVERY 1 DAY
    -> DO
    -> BEGIN
    ->     DELETE FROM EventDemo WHERE EventDateTime < NOW();
    -> END //
Query OK, 0 rows affected (0.31 sec)
mysql> DELIMITER ;

Giải thích

  • ON SCHEDULE EVERY 1 DAY: Chạy mỗi ngày một lần
  • EventDateTime < NOW(): Xóa các sự kiện đã quá hạn
  • DELIMITER //: Thay đổi dấu phân cách để định nghĩa block BEGIN...END

Quản lý Event

-- Xem event
SHOW EVENTS;

-- Xóa event
DROP EVENT DeleteDemo;

-- Bật/tắt event
ALTER EVENT DeleteDemo DISABLE;
ALTER EVENT DeleteDemo ENABLE;

Lưu ý quan trọng

  • Event chỉ chạy khi event_scheduler = ON
  • Cần quyền EVENT privilege
  • Độ chính xác phụ thuộc vào tần suất chạy (1 ngày = có thể chậm 24h)
  • Để TTL chính xác hơn, chạy mỗi phút: EVERY 1 MINUTE
  • MySQL 8.0+ có thể dùng GENERATED COLUMNS + PARTITION BY RANGE cho TTL hiệu quả hơn