MySQL同一事务中先更新在查询,结果与数据库中不一致问题

WinCC ActiveX控件“许可证缺失”故障排查:从注册表修复到系统兼容性全解析 本文深入解析WinCC ActiveX控件报错“未找到许可证信息”的根本原因与解决方案。核心在于系统注册表中控件的设计时许可证密钥丢失或损坏。文章提供了从手动修复注册表、排查64位系统兼容性,到预防性环境部署的全流程专业指南,帮助工程师彻底解决这一常见故障。 阅读详情

MySQL同一事务中先更新在查询,结果与数据库中不一致问题

问题背景:

java 代码在同一个事务中先执行update 再执行select 发现select 的数据是update之后的结果,此时事务还没有提交,直接查询数据库,数据库的数据还没有发生变更.

问题结论:

在数据库事务是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行,这是一种机制,用以维护数据库的完整性。在你这个事务单元中存在两个操作,一个是update,一个是select;你前面的update执行成功了,再执行select肯定能够查询到前面update的数据,因为你是在一个单元中。但是另外一个事务(即另一个单元)则不能select到这个update的数据,因为你update的数据还没提交,只在该单元中有效;

注意:此处要与脏读区分开,脏读所指的读到了未提交的数据(这是两个事务操作,而本文的问题前提是在同一个事务中)。也就是说,一个事务正在对一条记录做修改,在这个事务完成并提交之前,这条数据是处于待定状态的(可能提交也可能回滚),这时,第二个事务来读取这条没有提交的数据,并据此做进一步的处理,就会产生未提交的数据依赖关系。这种现象被称为脏读。

问题验证:

mysql> SELECT @@tx_isolation;
+-----------------+
| @@tx_isolation  |
+-----------------+
| REPEATABLE-READ |  --可重复读
+-----------------+
1 row in set
mysql> select * from shop_item_stock where id=145106957739827200;   -- 先查询数据此时shop=11111
+--------------------+-------+---------------+------------+----------+---------------------+---------------------+
| id                 | shop  | productsaleid | type       | stock    | createtime          | ts                  |
+--------------------+-------+---------------+------------+----------+---------------------+---------------------+
| 145106957739827200 | 11111 |    1201152020 | SHOP_STOCK | 84964984 | 2017-12-06 10:03:14 | 2019-09-20 10:43:01 |
+--------------------+-------+---------------+------------+----------+---------------------+---------------------+
1 row in set

mysql> begin; -- 开启事务
Query OK, 0 rows affected

mysql> update shop_item_stock set shop = 110 where id=145106957739827200; -- 更新shop为110
Query OK, 1 row affected

mysql> select * from shop_item_stock where id=145106957739827200;  --事务未提交查询 发现shop正是刚修改的110   若此时你新开一个事务查询会发现shop还是11111
+--------------------+------+---------------+------------+----------+---------------------+---------------------+
| id                 | shop | productsaleid | type       | stock    | createtime          | ts                  |
+--------------------+------+---------------+------------+----------+---------------------+---------------------+
| 145106957739827200 |  110 |    1201152020 | SHOP_STOCK | 84964984 | 2017-12-06 10:03:14 | 2019-10-18 09:57:04 |
+--------------------+------+---------------+------------+----------+---------------------+---------------------+
1 row in set

mysql> commit; --提交事务
Query OK, 0 rows affected

mysql> select * from shop_item_stock where id=145106957739827200; --查询结果是110
+--------------------+------+---------------+------------+----------+---------------------+---------------------+
| id                 | shop | productsaleid | type       | stock    | createtime          | ts                  |
+--------------------+------+---------------+------------+----------+---------------------+---------------------+
| 145106957739827200 |  110 |    1201152020 | SHOP_STOCK | 84964984 | 2017-12-06 10:03:14 | 2019-10-18 09:57:04 |
+--------------------+------+---------------+------------+----------+---------------------+---------------------+
1 row in set

mysql> --若此时新开一个事务再查询shop也是110   即同一事务中操作的数据在可见在不同事务中不可见

 

 

量子密钥分发(QKD)原理、工程实现与实战部署全解析 密钥分发是信息安全的核心基础,它解决了通信双方如何安全共享秘密密钥的难题。传统方法依赖于数学问题的计算复杂性,而量子密钥分发(QKD)则基于量子力学原理,为密钥分发提供了信息论安全的物理保障。其核心价值在于,利用量子不可克隆定理和测量坍缩原理,使得任何窃听行为都会被合法通信方检测到,从而在理论上实现无条件安全的密钥协商。这项技术特别适用于对安全性要求极高的场景,如金融数据同步、政务专网和电力系统保护。本文聚焦于量子保密通信,深入剖析了以BB84协议为代表的QKD工作原理,并详细拆解了包含单光子探测、偏振编码 阅读详情

相关推荐

OpenCV学习笔记(25)基于MFC和OpenCV的摄像机定标与立体匹配测试程序(20140505更新)

最近整理了一下这两年一直在用的摄像机定标与立体匹配测试程序,将代码进行了重构,界面也做了调整,分享出来方便有需要的朋友使用。当然我的编程能力有限,程序可能还有各种bug,请大家多多包涵。相关问题欢迎留言或email联系讨论,谢谢! ==================================================================================源码

晨宇思远 5万+

java代码如何解决 同一事务中先更新再查询,结果是更新后的数据问题

java代码如何解决 同一事务中先更新再查询,结果是更新后的数据问题

Java&Develop的博客 3763

一张图看懂中国民航适航审定体系:从适航司到审定中心,到底谁管谁?

本文深入解析中国民航适航审定体系,从立法层到执行层的完整链条,揭示适航管理的金字塔结构和核心流程。涵盖适航司、审定中心等关键机构职能,以及型号审定、生产许可审定等全生命周期管理,展现中国适航体系的特色实践与创新探索。

weixin_30896511的博客 475

同个事务下的新增和查询

问题:在项目中,一个事务下的先新增再查询和先查询再新增结果不同。

m0_47649585的博客 3403

【电机控制入门】——电机控制书籍推荐

电机控制入门书籍推荐及分享 阅读须知: 1.电机控制的入门是涉及到机械、电子与控制等复杂交叉学习,它需要持续投入时间才可以看到学习的效果,如同“一万小时定律”。俗话说,九层之台,起于垒土,因此电机控制入门没有所谓的速成培训班。相反,还需要夯实好一定的基础。为此,博主建议从基础理论抓起,故推荐相关的书籍并分享给大家。 2.学习电机贵在动手实践,无论是借助于MATLAB/Simulink仿真平台来验证理论分析,或是使用板子对所设计的控制系统进行物理实现,博主极力推荐在一定基础(看完部分以下推荐的书籍),一边动手

昔时扬尘处 3万+

ClickHouse的bitmap使用

ClickHouse的bitmap使用 bitmap的基本使用 在CK中bitmap有两种构建方式,在ClickHouse的官网有说明: (1)一个是由聚合函数groupBitmapState构造的, (2)另一个是由Array Object构造的。同时还可以将位图对象转化为数组对象。 bitmap实战 数据和基本数据表准备 创建一张基本表,一个用户表,有多个描述的维度,每个维度由该维度的唯一id。 CREATE TABLE test02(id UInt16, tag1 UInt8, tag2 UInt8,

zg_hover的专栏 5654

Mysql之事务(二)

文章目录隔离级别比较 隔离级别 1.READ_UNCOMMITTED(未提交读)。 在未提交读的隔离级别下,事务A对数据做的修改,即使没有提交,对于事务B来说也是可见的,这种问题叫脏读。这是隔离程度较低的一种隔离级别,在实际运用中会引起很多问题,因此一般不常用。 2.READ_COMMITTED(提交读)。 在提交读的隔离级别下,不会出现脏读的问题。事务A对数据做的修改,提交之后会对事务B可见,举...

记录日常的点点滴滴 1898

机器学习系列(1)_逻辑回归初步

1、总述 逻辑回归是应用非常广泛的一个分类机器学习算法,它将数据拟合到一个logit函数(或者叫做logistic函数)中,从而能够完成对事件发生的概率进行预测。 2、由来     要说逻辑回归,我们得追溯到线性回归,想必大家对线性回归都有一定的了解,即对于多维空间中存在的样本点,我们用特征的线性组合去拟合空间中点的分布和轨迹。如下图所示:     线性回归能对连续值结果进行预测,

寒小阳 13万+

同时对同一张表进行插入、查询和更新操作

mysql常规知识,避免踩坑

yu15338397549的博客 6004

避坑指南:STM32CubeMX安装后,你的第一个工程为什么中文全是乱码?

本文详细解析了STM32CubeMX安装后中文乱码问题的根源及解决方案。从诊断乱码现象到分析编码冲突背景,提供了新项目UTF-8化、旧项目GBK兼容及版本降级等多种实用方案,帮助开发者彻底解决这一常见问题。

weixin_30699955的博客 474

家庭路由器从入门到精通:连接设置、优化排障全指南

路由器作为家庭网络的核心枢纽,其工作原理基于NAT(网络地址转换)和DHCP(动态主机配置协议)两大关键技术。NAT负责将公网IP转换为多个内网IP,实现多设备共享上网;DHCP则自动为接入设备分配IP地址,简化网络配置。这些技术共同构建了稳定、安全的局域网环境,其价值在于为智能家居、在线办公、高清影音和游戏娱乐等场景提供可靠的网络基础。理解路由器的物理连接、后台设置与故障排查逻辑,是优化Wi-Fi信号覆盖、提升网络性能、保障家庭网络安全的关键。本文以路由器配置与排障为核心,详细解析从WAN/LAN口区分、

weixin_33393017的博客 405

关于在MySQL同一事务中先更新再查询,结果是更新后的数据问题

update之后立即执行select操作

weixin_42810470的博客 1713

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Mysql同一个事物内删除后查询_MySQL同一事务中先更新在查询,结果与数据库中不一致问题...

问题背景:java 代码在同一个事务中先执行update 再执行select 发现select 的数据是update之后的结果,此时事务还没有提交,但直接查询数据库,数据库的数据还没有发生变更.问题结论:在数据库事务是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行,这是一种机制,用以维护数据库的完整性。在你这个事务单元中存在两个操作,一个是update,一个是selec...

weixin_28746327的博客 2650

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

mysql执行查询时同时更新_MySQL同一事务中先更新在查询,结果与数据库中不一致问题...

问题背景:java 代码在同一个事务中先执行update 再执行select 发现select 的数据是update之后的结果,此时事务还没有提交,但直接查询数据库,数据库的数据还没有发生变更.问题结论:在数据库事务是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行,这是一种机制,用以维护数据库的完整性。在你这个事务单元中存在两个操作,一个是update,一个是selec...

weixin_42413747的博客 1282

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Spring事务问题,同一次请求中相同SQL查询结果不一致

上周同事让我帮他看个问题. 他说同一个SQL 两次执行后,查询结果不一致, 两次查询一次有记录一次没有记录

Keep learing, and stay fast 2272

MySQL事务之丢失更新问题

在事务的并发操作中,也就是多个事务同时对同一组数据进行操作时,可能会出现脏读、不可重复读、幻读、丢失更新这四个问题,本篇博客就来为大家讲解 丢失更新 问题。 丢失更新 就是两个事务在并发下同时进行更新,后一个事务的更新覆盖了前一个事务更新的情况,丢失更新是数据没有保证一致性导致的。比如,事务A 修改了一条记录,事务B 在 事务A 提交的同时也进行了一次修改并且提交。当事务A查询的时候,会发现刚才修改的内容没有被修改,好像丢失了更新。

小异常的博客 1万+

记一次事务中更新与查询数据不一致的问题分析

在软件开发过程中,事务(Transaction)的使用是保障数据一致性的核心机制。事务的ACID特性(原子性、一致性、隔离性、持久性)确保了数据库操作的可靠性。

小李同学的博客 1058

更新数据是先更新缓存(redis),还是先更新数据库(mysql)

提问: 老师,上次面试我的回答是先更新数据库,在更新缓存。 但是面试官给我的回答是,先更新缓存,再更新数据库。 后来我也上网查了下,先更新缓存,再异步将缓存中的数据同步到数据库。 但是我并没有查到相关的代码逻辑。总结两种方式入戏 1:先更新数据库 - 删缓存 - 再次访问 - 查询数据库 - 存入缓存 2:更新redis(新key覆盖旧key) - 查询 - redis异步...

tolode的博客 1万+

同一事务内数据不一致问题复盘

摘要: 活动初始化任务中出现事务异常导致数据不一致问题。排查发现,在Spring事务内使用分批保存工具时,数据库死锁导致事务回滚,但通用重试机制捕获异常并重试单批SQL,使后续操作在新事务中执行,造成部分数据写入成功、日志无报错的矛盾现象。根因是事务内对单条SQL进行重试且未区分异常类型。解决方案包括移除工具类中的重试逻辑、明确方法职责、确保事务异常直接抛出。教训在于事务内异常必须传播到边界、重试需在正确层级实现,方法命名应清晰体现行为边界。

substitute0的博客 230

MySQL 事务并发执行时的一致性问题

文章目录事务并发执行时遇到的一致性问题脏写(Dirty Write)脏读(Dirty Read)不可重复读(Non-Repeatable Read)幻读(Phantom)MySQL 中的幻读参考资料 MySQL 是一个客户端/服务器架构的软件。对于同一个服务器来说,可以有多个客户端与之连接。每个客户端与服务器建立连接后,就形成了一个会话。每个客户端都可以在自己的会话中向服务器发出请求语句,一个请求语句可能是某个事务的一部分。服务器可以同时处理来自多个客户端的多个事务。 在某个事务访问某个数据时,如要求其他试

秀强的专栏 1908

让MySQL和Redis数据保持一致的4种策略

让MySQL和Redis数据保持一致的4种策略

吴名氏的博客 4万+

MySQL事务之幻读问题

在事务的并发操作中,也就是多个事务同时对同一组数据进行操作时,可能会出现脏读、不可重复读、幻读、丢失更新这四个问题,本篇博客就来为大家讲解 幻读 问题。 幻读就是一个事务读到另一个事务新增加并提交的数据(insert)。在同一个事务中,对于同一组数据读取到的结果不一致。比如,事务A 新增了一条记录,事务B 在 事务A 提交前后各执行了一次查询操作,发现后一次比前一次多了一条记录。幻读出现的原因就是由于事务并发新增记录而导致的。

小异常的博客 4625

MySQL事务演示以及解决并发事务问题

这里通过一个转账的案例来进行事务的演示首先我们创建一个表,创建对应的字段,我这里表名为account,字段分别是id(主键),name,account,具体的建表语句和示例数据如下然后,我们进行第一种方式的演示MySQL默认是开启自动提交模式的,这意味着每个单独的SQL语句都被视为一个独立的事务并自动提交。你可以通过查询系统变量来检查当前的自动提交状态,这里执行代码MySQL默认该值为1,也就是说我们写的每一条SQL语句执行完都会自动提交。这里我们可以修改其值为0。

lv05121207的博客 2266

mysql 同一事务 查询不到

MySQL 事务隔离级别与“查询不到”现象解析 在数据库编程中,事务的隔离级别是一个非常重要的概念。它决定了事务在并发执行时,如何保证数据的一致性和完整性。本文将通过一个实际的例子,解释MySQL中事务隔离级别对查询结果的影响,并探讨“查询不到”现象的原因。 事务隔离级别 MySQL支持以下四种事务隔离级别: READ ...

weixin_37070875的博客 334

【MySQL】如何处理DB读写分离数据不一致问题?

在互联网中大型项目中,读写分离应该是我们小伙伴经常听说的,这个主要解决大流量请求时,提高系统的吞吐量。因为绝大部分互联网产品都是读多写少,大部分都是读请求,很小部分是写请求。1) 一个主库负责写请求,更新数据 2) 两个从库负责读请求,可以提高系统吞吐量 3) 主库和从库之间同步数据为什么产生数据不一致上图中业务流程。

fearless的博客 1996

redis进阶:mysql,redis双写一致性,数据库更新后再删除缓存就够了吗?

最近线上的一个状态修改功能出现了问题,一开始是运营找了过来,运营告知某条数据的状态已经开启了的,但是实际使用起来还是没有生效,于是拿到这个问题后,首先就去数据库查了这条数据,发现确实如他所说,状态数据是已经更改过的。但是为什么没有生效呢?于是再次查看了获取数据的方法,发现是优先获取的缓存,于是查询缓存里的数据,发现了问题所在,缓存里并没有将这条数据的状态更改过来,也就是缓存数据不一致问题。继续追查状态修改的方法,发现采用的更新方式是先更新数据库,然后删除缓存。

55555的博客 3924
上一篇: Java常用运算符(&&,&,||,|,>>>等)计算和二进制转换
下一篇: Redis实现分布式锁-源码记录
涛濤
博客等级 码龄12年 136粉丝 92原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值