【问题标题】:MYSql after update trigger not updating table更新触发器后的MYSql不更新表
【发布时间】:2014-11-11 10:52:32
【问题描述】:

我有以下触发器:

CREATE DEFINER = CURRENT_USER 
TRIGGER `radia`.`orderstable_AFTER_UPDATE` 
  UPDATE ON `orderstable`
  FOR EACH ROW begin 
      SET @VATCharged = Amount * (VAT*0.01); 

但在金额或增值税发生更改后,VATCharged 列不会更新。

该表有以下列;订单号(INT)、AccNo(VARCHAR)、发票号(VARCHAR)、说明(VARCHAR)、金额(INT)、VAT(INT) 和VATCharged(INT)。

解决这个问题的方法是什么?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    您需要针对该列指定oldnew 以获取更新前的旧值或更新后的新值

    set  @VATCharged := new.Amount * (new.VAT*0.01);
    

    编辑: 如果要更新表中的VATCharged 列,则触发器需要在更新内容之前为

    delimiter //
    create trigger `radia`.`orderstable_AFTER_UPDATE` 
    before update on `orderstable`
    for each row
    begin
      set new.VATCharged = new.Amount * (new.VAT*0.01);
    end ; //
    delimiter ;
    

    【讨论】:

    • 我把它改成了那样。它仍然不起作用。知道为什么吗?
    • 请在触发器后面添加完整的代码,即您如何使用VATCharged
    • 我在插入前有一个类似的触发器:'CREATE DEFINER=root@localhost TRIGGER radia.orderstable_BEFORE_INSERT BEFORE INSERT ON orderstable FOR EACH ROW BEGIN SET NEW.VATCharged = NEW.Amount * (NEW.VAT*0.01);结束'
    • 触发后你在哪里使用VATCharged?更新问题并添加表格结构。
    • 更新了问题。使用 iReport 将 VATCharged 放入报告中。
    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-01
    • 1970-01-01
    • 2015-01-17
    相关资源
    最近更新 更多