风之剑 发表于 2024-5-29 11:15:46

关于数据表更新赋值表达式的问题

各位格友,今天来讨论下关于数据表更新赋值表达式的问题。
这里和云表做下对比,是两种不同的方式:

首先来看下活字格的赋值操作: 需要先查询出待更新字段的值,然后进行加法计算。


https://gcdn-cdn.grapecity.com.cn/data/attachment/forum/202405/29/110238c95e5mogmpe9somm.png

然后来看下另外一个平台 云表的赋值操作:可以直接使用 待更新目标字段值进行加法计算。
https://gcdn-cdn.grapecity.com.cn/data/attachment/forum/202405/29/110251m7b9jxjb7xo22bb8.png


那么问题来了,现在有一个问题,比较迷惑:
云表的赋值方式:直接用目标字段 进行加法计算即可,即使有多个人同时更新这个字段,也能保证数值的准确性,因为数据表字段写入的时候是有写保护的,保证能一个个排队有序进行。

那如果是活字格的赋值方式:需要先设置变量,取到待更新的字段值。 假如这个期间有多人同时更新这个字段,都是先取到了待更新的字段的值,然后再进行数据表更新,更新是有先后顺序的,那么变量取到的值是否会存在过期的风险,本来已经有人更新了,结果还是取原来的值进行计算?
如果要保证结果准确,则至少在取变量的时候,就应该写保护了? 那么这个写保护应该是在什么时候启动的呢?

那么到底是如何保证更新数据的准确性呢? 欢迎资深格友指教解惑!!!:victory:

Lay.Li 发表于 2024-5-29 11:15:47

感谢各位大佬的支持~

您好,活字格中有事务命令可以去控制,如图所示可以将整个服务端命令使用事务命令去包裹住。这里使用的是内建库,事务等级选择的是可序列化

然后在页面中同时调用更新库存的服务端命令,先调用加载了延时命令的服务端命令,后调用了没有延时的服务端命令,发现第二个服务端命令会等第一个服务端命令中的事务提交后再执行,就不会读取到更新前的数据了

追风 发表于 2024-5-29 11:42:22

围观+1 看是否有更好的解决方案

风之剑 发表于 2024-5-30 15:00:58

Lay.Li 发表于 2024-5-30 14:16
感谢各位大佬的支持~

您好,活字格中有事务命令可以去控制,如图所示可以将整个服务端命令使用事务命令 ...

专业的介绍,例子也很明了,感谢!



请教下大佬,这个里面的 可变数据指的具体范围是哪些?

如果是可序列化,那么设置的库存变量 属于可变数据么? 如果是,那么是不是意味着可以同时读取了,这样的话,应该会错误才对? 按照测试结果,库存变量应该不是可变数据?

Lay.Li 发表于 2024-5-31 18:28:47


您好,不同数据库的隔离级别是不同的,帮助手册中是一个比较泛的解释,后边我们也反馈一下,看看能不能优化一下帮助手册

具体每种数据的隔离级别都是什么,您可以在网上查找相关资料哈,

深入解析Mysql中事务的四大隔离级别及其所解决的读现象


页: [1]
查看完整版本: 关于数据表更新赋值表达式的问题