更新完成后触发更改所有行

时间:2016-07-04 12:54:56

标签: mysql triggers mysql-workbench

在进行任何更新后,我想要一个名为transitions的表格,我想更改所有行的值

我正在使用以下触发器,它只更改我正在进行更新的ROW。

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

我正在尝试将所有行更改为signature = 288,如何修改触发器以实现此目的?我认为使用FOR EACH ROW就足够了。

提前致谢。

1 个答案:

答案 0 :(得分: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)上的索引会使这个速度非常快。并且,更新将比更新所有行更快,更快。