Để 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ầnEventDateTime < NOW(): Xóa các sự kiện đã quá hạnDELIMITER //: 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
EVENTprivilege - Độ 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 RANGEcho TTL hiệu quả hơn