我在 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 ;
问题是有时会返回以下错误:
Unknown column 'MINUTE_IN' in 'NEW'
发生此错误时,它不会停止,直到我使用完全相同的语句删除并重新创建触发器。当我这样做时,错误将停止发生,并且将毫无问题地发生几次插入,直到同样的问题毫无理由地返回。
谁能帮我解决这个问题? 提前致谢。
最佳答案
当您引用另一个已被截断的表时,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 中修复,但我尚未对此进行测试。
关于触发器中的 MySQL 错误 "Unknown column in ' NEW'",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21317513/