Mysql触发没有错误消息但代码不起作用

Posted

技术标签:

【中文标题】Mysql触发没有错误消息但代码不起作用【英文标题】:Mysql trigger no error message but code not working 【发布时间】:2014-11-21 17:04:22 【问题描述】:

我在 phpMyAdmin 中编写了这个触发器

BEGIN
DECLARE start DATETIME;
DECLARE now DATETIME;
DECLARE date DATETIME;

SELECT `starting` INTO start FROM events WHERE events.id = NEW.event_id;
SET now = NOW();
SET date = CURDATE();

IF start > now THEN

    IF DATE(start) = date THEN
        SET @hours = HOUR(start - now);
        IF @hours <= 1 THEN
            SET @text = 'in less than an hour';
        ELSE
            SET @text = CONCAT('in about ', @hours, ' hours');
        END IF;

        INSERT INTO notifications (user_id, subject, action_id, data, seen, activates)
        VALUES (NEW.user_id, NEW.event_id, 2, CONCAT('"period":"', @text, '"'), 0, now);

    ELSE

        INSERT INTO notifications (user_id, subject, action_id, data, seen, activates)
        VALUES 
            (NEW.user_id, NEW.event_id, 2, '"period":"tomorrow"', 0, DATE(start - INTERVAL 1 DAY)),
            (NEW.user_id, NEW.event_id, 2, '"period":"in one hour"', 0, start - INTERVAL 1 HOUR);
    END IF;
END IF;
END

它的目的是在用户提交他将要参加活动时创建有关开始活动的通知。如果事件不是今天,触发器会起作用,但如果事件是今天,我会收到此消息

列数据不能为NULL

列数据在表notifications 中。如果事件设置为今天开始,我得到的列数据不能为 NULL,如果事件在未来发生,比如明天,我会得到准确的消息。

非常感谢任何帮助!

【问题讨论】:

如果@text 为null,则@hours 必须为null - sql null 具有传染性,这可能意味着start 在您实际设置start 的第一个查询中为null,其中@987654325 @ 是基于的。 @MarcB 我刚刚检查过,通过将INSERT 语句中的@text 分别替换为startnow,我确定start 等于2014-11-21 20:00:00 和@987654332 @ 在测试时等于“2014-11-21 19:29:31”。出于某种原因,HOUR(start - now) 返回 NULL,我不明白.. 我不确定start - now 的数据类型应该是什么,但我对文档的快速阅读表明可能是一些数字类型。在任何情况下,它都不应该是DATETIMEDATETIMEHOUR() 函数似乎不太可能对此有用。 不应该是= HOUR(start) - HOUR(now)吗? datetime-datetime 将返回某种浮点数。 hour(float) 应该只返回1。在应用 hour() 之前将减法的结果存储在某处。 【参考方案1】:

这段代码有问题

HOUR(start - now)

我换成

HOUR(TIMEDIFF(start - now))

现在一切正常。

我必须通过Marc B 的help 解决问题,为此我感谢他和所有评论的人!

【讨论】:

以上是关于Mysql触发没有错误消息但代码不起作用的主要内容,如果未能解决你的问题,请参考以下文章

引发错误在 MySQL 触发器中不起作用

PLSQL 触发器引发应用程序错误不起作用

NodeJS Passport按路由配置,作为中间件添加并且没有错误但它不起作用/触发

MySQL 5.5.30 级联触发器不起作用

PHP/MySQL/PDO - 结果错误但没有数据库错误消息?

MySql - 触发器不起作用 - 中止插入