【问题标题】:Mysql Trigger: Tried other suggestions but still get Error #1064Mysql 触发器:尝试了其他建议,但仍然得到错误 #1064
【发布时间】:2014-08-13 03:29:11
【问题描述】:

我一直在这里查看其他 stackoverflow 问题,但似乎找不到我的错。我认为它的语法错误相关。我在哪方面做错了?

DELIMITER $$
DROP TRIGGER IF EXISTS keisan
CREATE TRIGGER keisan AFTER INSERT ON profitdb
FOR EACH ROW
BEGIN
DECLARE shinAgentPercent;
SET @shinAgentPercent:=`AgentRisk`-`SubAgentRisk`;
SET NEW.`SubAgentProfit` = `Profit`*(`SubAgentRisk`/100);
SET NEW.`AgentProfit` = `Profit`*(@shinAgentPercent/100);
END;
$$

【问题讨论】:

    标签: mysql triggers phpmyadmin


    【解决方案1】:

    DROP TRIGGER 之后不需要语句结束吗?

    DROP TRIGGER IF EXISTS keisan$$
    

    【讨论】:

      【解决方案2】:

      首先,您需要在drop ... 命令之后添加一个结束语句指示。

      DROP TRIGGER IF EXISTS keisan $$
      

      其次,我建议您使用BEFORE INSERT 触发器为表格的其他列设置表达式值。

      示例

      DELIMITER $$
      
      DROP TRIGGER IF EXISTS keisan $$
      
      CREATE TRIGGER keisan BEFORE INSERT ON profitdb
      FOR EACH ROW BEGIN
          SET @shinAgentPercent  := NEW.AgentRisk - NEW.SubAgentRisk;
      
          SET NEW.SubAgentProfit := NEW.Profit * ( NEW.SubAgentRisk  / 100 );
          SET NEW.AgentProfit    := NEW.Profit * ( @shinAgentPercent / 100 );
      END;
      
      $$
      
      -- now reset the delimiter to defaut
      DELIMITER ;
      

      【讨论】:

      • 谢谢它的工作,我在插入之后设置它的原因是因为该表将首先由其他表中的数据填充,然后在获得风险和利润之后,然后是计算代理和子代理利润值的时间
      • 对于trigger,数据在写入表之前是可用的。无论是insert 还是update。而且大部分AFTER是用来对其他表进行操作的。
      • 哦,我明白了。但我没有得到我所期望的。这就是我所做的。我先添加了触发器。然后在执行插入命令以用数据填充表格时,我收到错误 #1054 - Unknown column 'AgentRisk' in 'field list'。我删除了触发器,INSERT 起作用了。那么似乎是什么问题?
      • 你必须告诉我,AgetRisk 是什么?如果它不是表格列,则触发器无法知道其值,除非您在其主体内进行计算。如果AgentRiskSubAgentRisk 是表列,则只需使用NEW. 前缀限定它们。
      • 是的,它们是表格列。在执行 INSERT 时,我仍然会在“字段列表”中得到 #1054 - 未知列“AgentRisk”。可能是什么问题呢?我在帖子中添加了 INSERT 查询。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      • 2012-02-20
      • 2015-11-09
      • 2016-02-16
      • 2022-12-18
      相关资源
      最近更新 更多