Mysql触发器:尝试了其他建议,但仍然出现错误#1064
我一直在看其他问题,但似乎找不到我的错。我认为它与语法错误有关。我错在哪一方面Mysql触发器:尝试了其他建议,但仍然出现错误#1064,mysql,triggers,phpmyadmin,Mysql,Triggers,Phpmyadmin,我一直在看其他问题,但似乎找不到我的错。我认为它与语法错误有关。我错在哪一方面 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`
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;
$$
您的
下拉触发器后不需要结束语句吗
DROP TRIGGER IF EXISTS keisan$$
首先,您需要在drop…
命令后显示结束语句
DROP TRIGGER IF EXISTS keisan $$
其次,我建议您在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 ;
感谢它的工作,我之所以在INSERT之后设置它,是因为该表将首先由其他表中的数据填充,然后在获得风险和利润之后,然后是计算代理和子代理利润值的时候了。对于触发器
,在将数据写入表之前,数据是可用的。无论是插入
还是更新
。大部分之后的用于对其他表进行操作。哦,我明白了。但是我没有得到我所期望的。我就是这么做的。我先扣了扳机。然后在执行Insert命令用数据填充表格时,我在“字段列表”中得到了错误#1054-未知列'AgentRisk'
。我删除了触发器,INSERT
工作正常。那么问题出在哪里呢?你必须告诉我,什么是AgetRisk?若它不是一个表列,那个么触发器不能知道它的值,除非您在它的主体内进行计算。如果AgentRisk
和SubAgentRisk
是表列,则只需使用NEW.
前缀对它们进行限定。是的,它们是表列。在执行INSERT时,我仍然会在“字段列表”中获得#1054-未知列“AgentRisk”。有什么问题吗?我在我的帖子上添加了插入查询。