触发器中的MySQL错误“NEW”中的未知列“”
我在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'
发生此错误时,它将不会停止,直到我删除并使用完全相同的语句重新创建触发器。 当我这样做时,错误停止发生,并且几次插入将毫无问题地发生,直到同样的问题返回,显然没有理由。
有人可以帮我解决这个问题吗? 提前致谢。
当您引用另一个已被截断的表时,触发器上有一个MySQL 5.6.17的错误:http://bugs.mysql.com/bug.php?id=72446
也许这是原因? 我尝试通过将TRUNCATE table_name更改为DELETE FROM table_name来解决此问题(其中,table_name是我的触发器从中获取数据的表,即:如果表A上引用了表B的触发器,该错误可以发生在截断表B时)。
此外,该错误报告似乎表明,这是在MySQL 5.6.19中修复的,但我还没有测试过。
如果您无法修复此问题,则可能需要创建一个每隔几分钟运行一次存储过程的cron作业。 这是黑客攻击,但它可以帮助您识别问题。 它可能是数据库使用最多? 您是否检查操作系统以查看发生此错误时发生的情况。 您还应该检查日志文件是否有错误。 我已经看到了错误,直到他们开始干扰数据库。
另一种可能性是,你将表插入一个有很多索引的大表中? 如果插入引起延迟,可能会导致触发器出现瓶颈。
链接地址: http://www.djcxy.com/p/18707.html