MySQL触发器在INSERT后不触发

时间:2016-12-06 11:34:16

标签: mysql

我在MySQL数据库中创建了一个新的触发器,用于在插入后更新单元格值。我想要更新的单元格(gp_per)默认设置为空值。

这是触发器:

SET @gp_per = ((@retail_price - (@retail_price * 0.23)) - @cost_price) / (@retail_price * 0.23)

它创建得很好,我没有语法错误但是当我尝试插入一个新行时,gp_per单元格为NULL,而不是使用正确的值进行更新。我以前没有真正使用触发器所以我不能100%确定我做错了什么。

以下是触发器:

enter image description here

表的结构:

enter image description here

感谢您的反馈!

1 个答案:

答案 0 :(得分:0)

正如creating triggers上的MySQL文档所说:

  

在触发器主体中,您可以使用别名OLD和NEW来引用主题表(与触发器关联的表)中的列。 OLD.col_name在更新或删除之前引用现有行的列。 NEW.col_name引用要插入的新行的列或更新后的现有行。

关于trigger examples的MySQL文档仍然说:

  

在BEFORE触发器中,如果您具有UPDATE权限,还可以使用SET NEW.col_name = value更改其值。这意味着您可以使用触发器来修改要插入新行或用于更新行的值。 (这样的SET语句在AFTER触发器中没有效果,因为已经发生了行更改。)

以上表示您需要使用

SET NEW.gp_per=((NEW.retail_price - (NEW.retail_price * 0.23)) - NEW.cost_price) / (NEW.retail_price * 0.23)

表达式您需要将触发器更改为之前插入触发器。如果您的MySQL版本支持,您还可以考虑使用生成的列而不是触发器。