2016-07-04 72 views
0

表名transitions我想更改任何更新後所有行的值更新完成後觸發器更改所有行

我正在使用以下觸發器,它只更改我正在進行更新的行。

CREATE TRIGGER signaturetrigger BEFORE UPDATE ON `transactions` FOR EACH ROW 
BEGIN 
SET New.signature = '288'; 
END 

我試圖改變所有的行signature = 288,我怎麼能修改觸發以archieve是什麼?我認爲使用FOR EACH ROW就足夠了。

在此先感謝。

+0

您無法使用其觸發器更新同一表(您只能更改該新的原始表,而不能更改整個表) –

+0

如果您想在更新單個行時更新表中的每一行,您正在做的事情非常錯誤。 – Phylogenesis

+0

_I'm試圖改變所有的行到_你的意思是表中的所有行?或所有涉及的行? – Alex

回答

1

您可以使用更新觸發器與update聲明:

CREATE TRIGGER signaturetrigger AFTER UPDATE ON `transactions` 
    FOR EACH ROW 
BEGIN 
    UPDATE transactions 
     SET New.signature = '288'; 
END; 

但這卻似乎是一個很奇怪的事情。

考慮一個替代方案:只需在表中添加一個UpdatedAt列並更新該行中的簽名。然後,當你想要最新的簽名使用:

select signature 
from transactions 
order by UpdatedAt desc 
limit 1; 

transactions(UpdatedAt, signature)索引將使這相當迅速。而且,更新將比更新所有行快得多,速度更快。

+0

感謝您的答覆,更新似乎很邏輯,但我有以下錯誤'不能更新表'事務'存儲的函數/因爲它已經被調用這個存儲的函數/觸發器的語句使用,所以觸發' –

+0

@Borja。 。 。即使*更新觸發器之後,這是否正確?無論如何,你可以在答案的後半部分遵循建議。 –