mysql执行SQL查询时结果不一致_检查事务隔离级别设置与幻读

MySQL查询结果不一致最常见原因是事务未提交或隔离级别导致快照不同,REPEATABLE-READ下存在幻读,READ-COMMITTED每次SELECT可能看到新提交数据,长事务和主从延迟也会加剧该现象。MySQL 查询结果不一致,先查当前会话的隔离级别结果不一致最常见原因是事务没提交、其他事务在改数据,而你的会话看到的是不同快照------这直接由 transaction_isolation 决定。别猜,直接查:SELECT @@transaction_isolation;注意:MySQL 8.0+ 返回类似 REPEATABLE-READ,5.7 可能是 REPEATABLE-READ 或带 SESSION 前缀的完整值;如果返回 READ-COMMITTED,那每次 SELECT 都可能看到新提交的数据,自然"不一致"。全局设置不影响已开启的事务,只对后续新会话生效SET SESSION transaction_isolation = 'READ-COMMITTED'; 立即生效,但仅限当前连接应用用连接池时,可能复用旧连接,导致隔离级别和你预期不符幻读不是 bug,是 REPEATABLE-READ 下的正常现象你在同一个事务里两次 SELECT,第二次多出几行(或少几行),但没改过这些行------这就是幻读。MySQL 默认的 REPEATABLE-READ 能防止不可重复读,但**不阻止幻读**(除非加 SELECT ... FOR UPDATE 或用间隙锁)。普通 SELECT 不加锁,InnoDB 用 MVCC 快照,但快照只覆盖"已有行",不锁定"未来插入的位置"想彻底避免幻读,得显式加锁:SELECT * FROM t WHERE id > 100 FOR UPDATE;,但这会阻塞其他插入INSERT ... SELECT 或 UPDATE ... WHERE 在 REPEATABLE-READ 下也会受幻读影响,因为内部执行时可能读到新插入的行检查是否被长事务拖累一个没提交的事务卡了 10 分钟,它持有的快照会让所有后续 SELECT 都看不到这期间的变更,看起来像"结果卡住不动"。查活跃事务:SELECT trx_id, trx_state, trx_started, trx_mysql_thread_id FROM information_schema.INNODB_TRX;重点关注 trx_state = 'RUNNING' 且 trx_started 时间很早的记录。 文心快码 文心快码(Comate)是百度推出的一款AI辅助编程工具

相关推荐
呱呱复呱呱2 小时前
Django CBV 源码解读:一个请求是怎么找到你的 get() 方法的
python·django
Nturmoils3 小时前
订单列表慢查询,先看 WHERE、ORDER BY 和 LIMIT
数据库
曲幽7 小时前
刚部署的 LibreTranslate 频频翻车?我掏出了 20 年前的 StarDict 词典,用 FastAPI 搭了个本地词典翻译 API
python·fastapi·web·translate·goldendict·libretranslate·stardict·pystardict
渣波7 小时前
拒绝 SQL 焦虑!手把手带你用 NestJS + Prisma + DTO 写出“防弹”级后端代码
javascript·数据库·后端
荣码7 小时前
用Streamlit给AI应用套个界面,10行代码出Web页面
java·python
兵慌码乱17 小时前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·sqlite·信号与槽·pyqt5·数据库设计·桌面应用开发·事务处理
金銀銅鐵18 小时前
[Python] 体验用欧几里得算法计算最大公约数的过程
python·数学
FreakStudio1 天前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
用户0332126663671 天前
使用 Python 从零创建 Word 文档
python
Csvn1 天前
Python 两大经典坑点 —— 可变默认参数 & 闭包延迟绑定
后端·python