找回密码
 立即注册

QQ登录

只需一步,快速开始

pan00001
金牌服务用户   /  发表于:2024-7-25 17:04  /   查看:366  /  回复:4

事务之外变量值在提交事务前极短时间内变量值被其他用户修改发生变化不在事务内怎么办?
在数据库SQL操作中可以实现的方法:数量=数量+变量值(数量为字段名)



4 个回复

倒序浏览
Shawn.Liu活字格认证
超级版主   /  发表于:2024-7-26 11:25:33
沙发
大佬,您指的是在当前事务中读取到的变量值不再是事务外读取到的变量值吗,那您可以考虑将该变量放到事务命令中,修改隔离级别,后面提到的在数据库SQL操作中可以实现的方法,这个看起来可以使用执行SQL命令来实现
回复 使用道具 举报
pan00001
金牌服务用户   /  发表于:2024-8-1 22:59:38
板凳
在无代码操作时,没有办法把变量值获取操作放在事务内,事务内只能是数据库的增、删、改
回复 使用道具 举报
没事测着玩
高级会员   /  发表于:2024-8-2 08:07:27
地板
pan00001 发表于 2024-8-1 22:59
在无代码操作时,没有办法把变量值获取操作放在事务内,事务内只能是数据库的增、删、改

服务端命令里有个事务命令,里面可以包含其他大部分命令,并且官方解释是事务可以传递的。
回复 使用道具 举报
Levi.Zhang
超级版主   /  发表于:2024-8-2 10:06:46
5#


大佬,您这种情况还是要分析您的变量值来自于哪里:

1.如果您的变量值是在数据库之内,建议选择事务命令中的隔离级别选择最后一种:可序列化(但是效率很低)。


这四种隔离级别我也帮您百度了,可以参考下:


读未提交:可以从字面意思理解为,读取到未提交的数据。如果在系统中读取到未提交的数据,会出现什么问题?首先,系统读取到未提交的数据之后,修改的数据的信息,进行了提交。这时候就会产生脏读的情况,出现这种问题,系统的数据肯定是不能正常使用了。

读已提交:从字面理解就是读取已提交的数据,正好是解决上面的问题,避免脏读的情况发生,你读取已经提交的数据,肯定是事物已经结束这条数据可以正常操作了。但是也会出现一种情况,就是我在这个数据提交之前读取过一次数据,然后在提交之后又读取一次数据这两次读取的结果肯定是出现比较大的差异。这种情况是“不可重复读”。这种情况一般经常会出现在,并发场景或者是前后操作时间比较相近,或者是系统之间的前后调用等。考虑到系统的安全性,这种情况肯定也需要避免掉

可重复读:系统默认的事物隔离级别这个意思就是可重复读取数据,但是提交事物之后才能正常读取数据。如果A、B都开启事物对表a进行操作的话,则需要A、B都提交之后才能正常访问a表的数据,这个时候也会出现一个问题,就是B修改的数据提交之后,A也没有办法看到,等到A提交之后,重新查询了这一行数据发现和A原来修改的数据不一致。这种情况被称为幻读,如果出现幻读的情况的,很简单一个问题跟不可重复读一样,就是我在操作的时候读取到的数据信息不一致,导致修改数据出现问题。

序列化:这个是为了解决幻读问题。序列化读取的时候,是不允许第二个用户进行操作的,如果有第二个用户进行操作,则对该用户进行等待操作,只有在第一个用户执行完成之后才能执行第二个用户执行的操作,可见这个事物虽然隔离级别上能保证数据的一致性,但是执行效率很低。



2.如果你您的变量值是在数据库之外,那应该与事务没有关系。
希望可以帮助到您!


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部