sql - 手动修改更新的列值时,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)
解决方案
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);
数据库甚至不应该让您尝试为计算列分配值——并且该值始终是正确的。
推荐阅读
- haskell - 比较两个字符串列表并删除部分匹配的项目
- asp.net-core - 如何在 Asp.net Core 应用程序中创建文本文件
- mysql - 外键列是否可以在同一引用表的一行中具有多值?
- java - Java通过接口反射提取泛型类型参数
- ios - MapKit showUserLocation 未显示蓝色位置标记
- css - 在本地主机上刷新页面后显示按钮样式 - ReactJS / Material-UI / makeStyles/useStyles
- python - 将3通道图像转换为1通道python
- scala - 如何使用 spark createData Frame 从 List \seq 集合创建 DataFrame
- node.js - Node.js | 删除json中的元素
- javascript - NodeJS从子类访问父类构造函数中的对象