尝试创建一个触发器,删除任何90天的记录。我使用了stackoverflow中的一个触发器语句,我发现并稍微更改了语句,但在我的MySQL Workbench中,我收到了语法错误。我似乎无法弄清楚出了什么问题。
以下是我的询问:
create trigger user_connections_dump after insert on user_connections
for each row
begin
delete from connection_time where Date('2014-06-09') > Date('now','-90 days')
end;
答案 0 :(得分:7)
您的需求看起来更像是一个事件,而不是一个触发器。
CREATE EVENT IF NOT EXISTS `Clean_Older_Than_90_days_logs`
ON SCHEDULE
EVERY 1 DAY_HOUR
COMMENT 'Clean up log connections at 1 AM.'
DO
DELETE FROM log
WHERE log_date < DATE_SUB(NOW(), INTERVAL 90 DAY)
答案 1 :(得分:2)
CREATE TRIGGER user_connections_dump
AFTER INSERT ON user_connections
FOR EACH ROW
DELETE FROM log
WHERE log_date < DATE_SUB(NOW(), INTERVAL 90 DAY)
您应该比较log
表中的日期列,而不是文字日期。然后使用DATE_SUB
减去日期,而不是Date
函数。
答案 2 :(得分:1)
CREATE EVENT IF NOT EXISTS `Delete_Older_Than_90_Days`
ON SCHEDULE EVERY 1 DAY
STARTS STR_TO_DATE(DATE_FORMAT(NOW(),'%Y%m%d 0100'),'%Y%m%d %H%i') + INTERVAL 1 DAY
DO
DELETE LOW_PRIORITY FROM log WHERE log_date < DATE_SUB(NOW(),INTERVAL 90 DAY)