【发布时间】:2014-02-14 13:15:24
【问题描述】:
我在 MySQL 中遇到与“插入前触发器”不一致的错误,无法找出原因。
我有一张桌子,描述如下:
+-----------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------------+------+-----+---------+-------+
| ROW_ID | int(11) | NO | PRI | 0 | |
| ID | int(11) | NO | UNI | NULL | |
| TITLE | varchar(32) | NO | | NULL | |
| TEXT | varchar(500) | NO | | NULL | |
| URL | varchar(200) | YES | | NULL | |
| MINUTE_IN | int(11) | YES | | NULL | |
| SECOND_IN | int(11) | YES | | NULL | |
| TVSHOW_ID | int(11) | NO | MUL | NULL | |
| IMAGE | varchar(4000) | YES | | NULL | |
+-----------+---------------+------+-----+---------+-------+
我有一个带有以下语句的触发器:
delimiter $$
CREATE TRIGGER ACTIVATE_IRT_CONTENT BEFORE INSERT ON WEXTRAS_CONTENT
FOR EACH ROW
BEGIN
IF (SELECT s.ACTIVE
from WEXTRAS_TVSHOW s
where s.id = NEW.tvshow_id) = 1 AND NEW.MINUTE_IN = 0 AND NEW.SECOND_IN = 0
THEN SET NEW.MINUTE_IN = TIMESTAMPDIFF(MINUTE,(select INIT_TIME from WEXTRAS_TVSHOW s
where s.id = NEW.tvshow_id
),sysdate());
SET NEW.SECOND_IN = SECOND(SEC_TO_TIME(TIMESTAMPDIFF(SECOND,(select INIT_TIME from WEXTRAS_TVSHOW s
where s.id = NEW.tvshow_id
),sysdate())));
END IF;
END$$
delimiter ;
问题是有时会返回以下错误:
“NEW”中的未知列“MINUTE_IN”
发生此错误时,它不会停止,直到我使用完全相同的语句删除并重新创建触发器。当我这样做时,错误就会停止发生,并且会毫无问题地发生几次插入,直到同样的问题毫无理由地再次出现。
有人可以帮我解决这个问题吗? 提前致谢。
【问题讨论】:
-
为什么你的 IF 条件中有 3 个额外的分号?和其他地方的其他分号,我原以为它会抱怨语法错误。
-
糟糕...当恢复过去的一些尝试以查看问题是否不再发生时,这实际上是一个复制/粘贴错误。我编辑了我的原始帖子以更正它。对不起...
-
+1 我也想知道答案是什么,因为我认为您发现了一个非常奇怪的错误。
-
我无法重现该问题,没有生成错误。您使用的是什么版本的 MySQL? SQL Fiddle Test
-
我在 CentOS 64 位机器上使用 5.6.15。我也开始认为这可能是一个 MySQL 错误。我也不能总是复制错误...这种行为似乎很随机...
标签: mysql sql triggers mysql-error-1054