我在MySQL中有一个”之前插入触发器“的不一致错误,无法找出原因。触发器中的MySQL错误“NEW”中的未知列“
我有以下描述的表:
+-----------+---------------+------+-----+---------+-------+
| 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个额外的分号?和其他地方的其他分号,我会认为它会抱怨语法错误。 –
糟糕...这实际上是一个复制/粘贴错误,当恢复一些过去的尝试,看看问题是不会再发生。 我编辑了我的原始文章以纠正它。 对不起...... – barras
+1我想知道答案是什么,因为我认为你已经发现了一个非常奇怪的错误。 –