触发器中的 MySQL 错误 "Unknown column in ' NEW'"

标签 mysql sql triggers mysql-error-1054

我在 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/

相关文章:

php - MySQL计算最近1年的记录

mysql - 为什么 LIMIT 运算符不能正常工作?

mysql - 每次使用触发器插入 MySQL 5.6 中的目标表后,尝试将上次更新的 row_id 从源表拉到另一个表

mysql - 帮助从 MySQL 触发器中删除别名

sql - SCOPE_IDENTITY 而不是插入触发器的解决方法

java - SQL 连接在普通 Java 中有效,但在 Android 中无效

php - PDO 支持多个查询(PDO_MYSQL、PDO_MYSQLND)

mysql - 数据库删除旧条目

sql - Hive SQL 编码风格 : intermediate tables?

java - Spring为SQL表创建数据库存储库