【问题标题】:Creating a trigger that records modifications on table A by inserting values in table B通过在表 B 中插入值来创建记录对表 A 的修改的触发器
【发布时间】:2021-08-13 20:04:05
【问题描述】:

我在使用以下触发器时遇到问题在表 A 中。问题似乎是 select * 计数,但我无法弄清楚。任何帮助将不胜感激!

DELIMITER $
CREATE TRIGGER t_BI          
AFTER INSERT ON A
FOR EACH ROW
    BEGIN
      IF NEW.numero=4 THEN
        INSERT INTO B(name,nbLoc)
        VALUE(CURRENT_USER(),SELECT COUNT(*) FROM A WHERE numero = 4);
      END IF;
    END
$

DELIMITER ;       

【问题讨论】:

  • 触发器定义以create trigger 开头。而且如果你关心数字4,为什么代码引用5
  • 感谢回复,抱歉没有完整复制

标签: mysql sql triggers


【解决方案1】:

先尝试将计数值存储在变量中,然后在 INSERT 中使用该变量

DELIMITER $
CREATE TRIGGER t_BI          
AFTER INSERT ON A
FOR EACH ROW
    BEGIN
    
      DECLARE cnt INT;

      IF NEW.numero=4 THEN
      
        SET cnt = ( SELECT COUNT(*) FROM A WHERE numero = 4) ;        
      
        INSERT INTO B(name,nbLoc)
        VALUE(CURRENT_USER(), cnt);
        
      END IF;
      
    END
$

DELIMITER ;  

【讨论】:

  • 谢谢你的回复,这就是我猜我必须做的,但你知道为什么其他方式不起作用吗?
  • @VelCrow 我不能肯定地说,因为您还没有发布错误消息。我认为它属于以下Restrictions for Stored Functions在存储的函数或触发器中,不允许修改调用函数或触发器的语句已经使用(用于读取或写入)的表。 尽管您没有尝试修改已被使用的表,但您在 INSERT 中引用了它,这可能是 MySQL 不喜欢的。
  • 好吧,再次感谢您,我的问题解决了
猜你喜欢
  • 2012-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-22
  • 2017-10-26
  • 1970-01-01
  • 1970-01-01
  • 2017-07-06
相关资源
最近更新 更多