因数据库中历史登录信息过多,造成数据库负载过大,需只保留6小时内的登录信息,
    我在这里是根据登录历史表中的一个创建时间字段和数据库当前时间进行比较,得出登录存在的时间。使用timstampdiff函数可以解决该问题。
    具体sql如下:

    1. -- 开启event_scheduler sql指令
    2. SHOW VARIABLES LIKE '%event_scheduler%';
    3. SET GLOBAL event_scheduler = ON;
    4. -- 定义存储过程
    5. DELIMITER $$
    6. DROP PROCEDURE IF EXISTS delete_login_token $$
    7. CREATE PROCEDURE delete_login_token()
    8. BEGIN
    9. IF EXISTS(SELECT id FROM sys_token_his WHERE TIMESTAMPDIFF(hour , EFF_TIME, NOW()) > 6) THEN
    10. -- DELETE
    11. -- from sys_token_his
    12. -- where id in
    13. -- (select id from (SELECT id FROM sys_token_his WHERE TIMESTAMPDIFF(hour, EFF_TIME, NOW()) >= 10) a);
    14. delete from sys_token_his where WHERE TIMESTAMPDIFF(hour , EFF_TIME, NOW()) > 6;
    15. END IF;
    16. END
    17. $$
    18. DELIMITER ;
    19. -- 创建定时器,每间隔10分钟调用一次存储过程
    20. DROP EVENT IF EXISTS event_remind_status;
    21. CREATE EVENT event_remind_status
    22. ON SCHEDULE EVERY 10 minute DO
    23. BEGIN
    24. CALL delete_login_token();
    25. END;
    26. -- 启动定时器
    27. ALTER EVENT event_remind_status ON COMPLETION PRESERVE ENABLE;
    28. # 关闭定时器
    29. ALTER EVENT event_remind_status ON COMPLETION PRESERVE DISABLE ;
    30. # 查看事件
    31. show events ;
    32. # 查看事件创建语句
    33. show create event event_remind_status;