2016-12-06 224 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版本支持,您也可以考慮使用生成的列而不是觸發器。