Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql触发器:尝试了其他建议,但仍然出现错误#1064_Mysql_Triggers_Phpmyadmin - Fatal编程技术网

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”。有什么问题吗?我在我的帖子上添加了插入查询。