Mysql Trigger删除语句给出语法错误。但不是单独运行的时候

时间:2018-01-26 18:53:07

标签: mysql triggers

我在学校项目中使用000webhost。它没有免费版的活动功能。因此,如果元组过期,我会使用Trigger删除元组。但是这给了

  

"#1064 - 您的SQL语法出错;检查手册   对应于您的MariaDB服务器版本,以获得正确的语法   靠近''在第4行"。

这是我的触发器SQL

CREATE TRIGGER notification_delete
AFTER DELETE ON notification
FOR EACH ROW

BEGIN
    DELETE
    FROM notification
    WHERE (DATEDIFF(CURDATE(), date_created) > 2);
END

我检查了DELETE语句它工作正常

DELETE
FROM notification
WHERE (DATEDIFF(CURDATE(), date_created) > 2);

这是我的表

CREATE TABLE notification (
    id INT (11) NOT NULL
    ,user_id INT (11) NOT NULL
    ,message VARCHAR(1023) COLLATE utf8_unicode_ci DEFAULT NULL
    ,priority SET (
        '1'
        ,'2'
        ,'3'
        ,'4'
        ,'5'
        ) COLLATE utf8_unicode_ci NOT NULL
    ,date_created DATE NOT NULL
    ,breakdown_user_id INT (11) DEFAULT NULL
    ,appointment_id INT (11) DEFAULT NULL
    ,order_id INT (11) DEFAULT NULL
    ) ENGINE = InnoDB DEFAULT CHARSET = utf8 COLLATE = utf8_unicode_ci;

1 个答案:

答案 0 :(得分:-1)

您的问题是; - 您需要生效另一个分隔符,否则解析器会将该分号解释为查询的结尾。

DELIMITER |

CREATE TRIGGER notification_delete AFTER DELETE on notification
FOR EACH ROW
BEGIN
    DELETE FROM notification WHERE (DATEDIFF(CURDATE(), date_created)>2);
END

DELIMITER ;

但是,修复后可能还有其他困难,因为修改触发操作的查询中使用的表有限制。您可能需要了解哪个数据库操作会触发此操作。因为它只是一个不应该成为问题的一般清理。