我有一個表,我需要更新每次有東西插入到另一個表中。MySQL觸發器更新動態列
表要更新:counters
插入sales
。 問題是counters
中將更新的列根據表sales
中的插入而不同。
我一直在環顧四周,從昨天開始搜尋,但無濟於事。 我試過使用CAST(.. AS CHAR)
函數,但無濟於事。
這是說法應該是什麼樣子:
CREATE TRIGGER `sales_AFTER_INSERT` AFTER INSERT ON `sales` FOR EACH ROW
BEGIN
UPDATE counters SET {NEW.sale_provider} = {NEW.sale_provider} + NEW.sale_quantity WHERE counters.cnt_sendername = NEW.sale_sendername;
END;
其中{New.sale_provider}
是要更新的列的名稱。
櫃檯表看起來像:
| sendername | prov1 | prov2 | prov3 | ...
其中列名(prov1,prov2 ..)是供應商
這是可能的id?我怎樣才能做到這一點? 我是觸發器的新手,仍然缺乏對SQL語言和MySQL功能的深入理解。
注:
- 有4列作爲一個開始,因爲有4個供應商,計數器表供應快速訪問限制,而不是每次都計算它,這將是使用相當多並重新計算它每次都是非常耗費資源的。
- 隨着每個新的提供者添加一個新的列將被添加到計數器表中,它也應該是可更新的,因此需要某種形式的變量。
您的幫助是最受讚賞!
編輯:
的一點是,更新的列每一次會有所不同,我知道這是不同尋常,但我認爲這是可行的非少。 插入到sales
中的新數據將影響counter
中的一列,但影響哪一列是需要確定的。
找了一段時間後,我發現一些東西,能解決什麼,我需要,但仍無法得到它的運行:
CREATE TRIGGER `sales_AFTER_INSERT` AFTER INSERT ON `sales` FOR EACH ROW
BEGIN
SET colname= New.sale_provider;
UPDATE counters SET colname = colname + NEW.sale_quantity WHERE counters.cnt_sendername = NEW.sale_sendername;
END;
,但它告訴我,colname
不是一個系統變量? 我一直在尋找如何分配一個變量,他們都看起來像我做了什麼,什麼是錯的?
[加入MySQL的列的表使用觸發器(可能的重複http://stackoverflow.com/questions/42450231/adding-mysql-列表到觸發器) – Psi
@Psi正在改變插入新列的表,這是更新現有列的名稱是可變的 - 完全不同。 – bakz
同樣的答案:動態SQL不允許在觸發器中使用。列名在DDL中不可變,與表名相同 – Psi