手动修改更新列值时HeidiSQL Before Update触发错误

HeidiSQL Before Update trigger error when manually modifying updated column value

BEGIN
    SET NEW.value_result = NEW.value_a + NEW.value_b;
END

我想了解为什么如果我手动修改 value_result 列会显示以下错误:

MariaDB:错误 0 行本应为 1 时已更新。

如果我手动修改 value_a 或 value_b 列,则没有问题,并且 value_result 列已完美更新。但是,如果我“意外”修改了 value_result 列,则会显示错误。

这可以预防吗?手动我的意思是使用 HeidiSQL 界面而不是查询代码。

所有列都是 INT(11)

MySQL 和 MariaDB 只更新值发生变化的行。 Here 是 db<>fiddle.

中的一个例子

我怀疑这就是您遇到的问题。

如果你这样做:

update t
    set value_a = 123
    where id = ?;

然后(大概)value_avalue_result 都会改变。该行已更新。

如果你这样做:

update t
    set value_result = 123
    where id = ?;

然后触发器将 value_result 重置为旧值并且不会更改任何行。

注意:听起来您最好使用计算列而不是在触发器中设置值:

alter table t add value_result int as (value_a + value_b);

数据库甚至不允许您尝试为计算列赋值 -- 而且该值始终是正确的。