Mysql

在插入後觸發器期間從表 B 中的列更新表 A 中的列

  • March 14, 2018

我正在使用 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

社區 wiki 答案基於問題作者留下的評論

我按照建議做了,從 csv 文件插入記錄,然後從命令提示符處,銷售稅為 0,表格的稅率為 0.0925

原來V_tax被定義為一個int,稅數據類型是decimal(8,6)。我改為:

declare v_tax decimal(8,6)

……它的工作原理。

引用自:https://dba.stackexchange.com/questions/199540