【发布时间】:2013-07-16 23:29:40
【问题描述】:
这是我的创建触发器。我希望在插入 vhftofass 时执行此查询(UPDATE vhf_msg_rx SET msg_text="";),这意味着它使此表为空 vhf_msg_rx。但是当我在插入查询后编写该查询时会出错(无法更新表'vhf_msg_rx'存储函数/触发器,因为它已被调用此存储函数/触发器的语句使用。)请帮助我该怎么做
CREATE
/*!50017 DEFINER = 'root'@'localhost' */
TRIGGER `VHFtoFASS` AFTER UPDATE ON `vhf_msg_rx`
FOR EACH ROW BEGIN
INSERT INTO vhftofass SELECT NULL,msg_text,NOW(),0 FROM vhf_msg_rx WHERE msg_text<>"";
END;
$$
【问题讨论】:
-
如果您在每次更新到
vhf_msg_rx时都插入vhftofass,为什么需要在each的后一个表中插入每个非空msg_text> 场合?如果NEW.msg_text现在不为空,那么仅将新更新的记录插入vhftofass就足够了?这将避免必须从锁定的表中读取。 -
如您所见,在 MySQL 中,您无法在分配给该表的更新触发器内修改表 - 大概是为了避免不得不处理这可能暗示的递归。在此处描述您要执行的操作,可能有一种使用 BEFORE 触发器的方法。
-
如果表 vhf_msg_rx 表有新数据,它将插入表 vhftofass。并使 vhf_msg_rx 为空,以便我确保此消息在 vhf_msg_rx 中有我无法阅读的新消息。一次两条消息可能相同。如果我不做 null 我如何理解这条消息是新的或旧的。请任何解决方案给我。谢谢