2016-12-06 195 views
0

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

这里是触发:

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

感谢您的任何反馈!

+2

你做了什么创建会话变量,它不会触及任何列值。在你寻求帮助之前,你先阅读关于触发器的内容吧?它们的语法很简单,如果您知道基本的SQL查询,那么也可以处理触发器。 – Mjh

回答

0

正如MySQL文档creating triggers说:

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

还是关于trigger examples MySQL文档说:

在BEFORE触发器,你也可以改变它与SET NEW.col_name =值值,如果你有这方面的UPDATE权限。这意味着您可以使用触发器修改要插入新行或用于更新行的值。 (这样一组语句在AFTER触发器没有影响,因为该行的变化已经发生了。)

,你需要使用

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

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