Mysql
在插入後觸發器期間從表 B 中的列更新表 A 中的列
我正在使用 MYSQL 工作台
我有一個帶有銷售稅率的居住表,當插入新的居住記錄時,我希望從稅率表中更新它的 sales_tax 欄位。2 個表通過 zip_code 連接。
我正在使用 WORKBENCH 表觸發器來創建程式碼
我嘗試了幾件事,但在語法或載入過程中出現錯誤
如果我使用“UPDATE”,則會收到錯誤程式碼 1442,這似乎表明不允許“UPDATE”。
我嘗試過的東西,工作台生成的程式碼
使用
infrastructure
$$CREATE DEFINER = CURRENT_USER TRIGGER `infrastructure`.`Residence_AFTER_INSERT` AFTER INSERT ON `Residence` FOR EACH ROW BEGIN select tr.tax_combined_rate as tax from sales_tax_rate as tr where residence.res_zip = tr.zip_code; set residence.res_sales_tax = tax; END
結果錯誤:錯誤 1193:未知系統變數“res_sales_tax”
然後我註釋掉“set Residence.res_sales_tax = tax”這一行
結果錯誤:錯誤 1415:不允許從觸發器返回結果集
此錯誤表明我無法從觸發器內的另一個表中獲取值
有人可以給我一些指導可以這樣做嗎?
您需要一個插入前觸發器(“插入後”,鳥已經飛了,修改新的 vales 是沒有用的 - 如果 MySQL 允許你)。在觸發器主體中,使用以下程式碼:
Declare v_tax int; select tr.tax_combined_rate into v_tax from sales_tax_rate as tr where NEW.res_zip = tr.zip_code; set NEW.res_sales_tax = v_tax;
看這裡的效果:https ://www.db-fiddle.com/f/eEiK6pKGEQEoYL9BPdfooP/0
我按照建議做了,從 csv 文件插入記錄,然後從命令提示符處,銷售稅為 0,表格的稅率為 0.0925
原來
V_tax
被定義為一個int
,稅數據類型是decimal(8,6)
。我改為:declare v_tax decimal(8,6)
……它的工作原理。