首页 > 解决方案 > 手动修改更新的列值时,HeidiSQL Before Update 触发错误

问题描述

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)

标签: sqltriggersmariadbheidisql

解决方案


MySQL 和 MariaDB 仅更新值更改的行。 是 db<>fiddle 中的一个示例。

我怀疑这是您看到的问题。

如果你这样做:

update t
    set value_a = 123
    where id = ?;

然后(大概)两者都value_a改变value_result​​。该行已更新。

如果你这样做:

update t
    set value_result = 123
    where id = ?;

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

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

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

数据库甚至不应该让您尝试为计算列分配值——并且该值始终是正确的。


推荐阅读