2016-07-04 48 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。 。 。即使*更新触发器之后,这是否正确?无论如何,你可以在答案的后半部分遵循建议。 –