0xLittleFi 最近的时间轴更新
0xLittleFi

0xLittleFi

V2EX 第 569975 号会员,加入于 2022-01-24 10:56:05 +08:00
今日活跃度排名 8532
0xLittleFi 最近回复了
39 天前
回复了 0xLittleFi 创建的主题 创业组队 假期空闲,想找一个项目共建
@isSamle 先适应,如果确实代码风格和技术方案上有比较大的歧义,可以沟通退出,都是一种相互的尝试
39 天前
回复了 0xLittleFi 创建的主题 创业组队 假期空闲,想找一个项目共建
@ztm0929 这是什么新奇的东西。。 维护百科?
50 天前
回复了 zsvc 创建的主题 投资 现在牛市是否可以上车?
all in buy china !
爱了 爱了
192 天前
回复了 gongxuanzhang 创建的主题 程序员 在一个群里被恶心坏了
在 MySQL 中,幻读 是一种特定情况下的并发控制问题,它发生在使用事务时,特别是在可重复读( Repeatable Read )隔离级别下。幻读是指在同一个事务内,当执行同样的查询时,第二次查询返回了第一次查询未出现的新行,这些新行是在第一次查询之后被其他事务插入的。

幻读通常与以下场景相关:

范围查询:

当一个事务在执行一个范围查询(如 SELECT * FROM table WHERE some_column BETWEEN value1 AND value2 )时,如果在事务开始后,其他事务在这个范围内插入了新的行,那么在事务的后续查询中,这些新行将被看到,尽管它们在事务开始时并不存在。
索引间隙:

在 InnoDB 存储引擎中,使用行级锁和间隙锁( Next-Key Locks )来防止幻读。但是,如果查询不包含任何索引范围条件,或者索引选择性不高,导致锁定的是整张表或大范围数据,那么幻读仍然可能发生。
隔离级别:

在默认的可重复读隔离级别下,InnoDB 通过多版本并发控制( MVCC )防止脏读和不可重复读,但仍然可能遇到幻读。
要完全避免幻读,可以将隔离级别提升到序列化( Serializable )。这将对所有查询施加读锁,从而确保事务之间的一致性,但代价是降低了并发性能。
解决幻读的方法包括:

使用 SELECT ... FOR UPDATE:

在查询时添加 FOR UPDATE 子句,这会锁定查询到的行,直到事务结束。但这只适用于锁定已经存在的行,对于新插入的行,仍可能出现幻读。
提升隔离级别到 SERIALIZABLE:

这是最高的隔离级别,会阻止幻读,因为它会对整个查询进行锁定,相当于对事务执行时的数据库快照进行读取。但这种方法可能会导致大量的锁竞争和阻塞,降低系统性能。
使用特定的事务设计:

通过调整事务的逻辑,例如使用更大的事务粒度,或者避免在事务中进行范围查询,可以减少幻读的可能性。
请注意,幻读仅在特定隔离级别下发生,并且主要与并发事务插入新行有关。在读已提交( Read Committed )隔离级别下,由于每次查询都会看到最新的提交,因此幻读的概念并不适用。
加 v 提示频繁,已经申请试用
金融游戏,最后比的还是谁跑的快。
让其他人的钱转移到你的口袋里,如果认知够,赚钱很快。如果刚入行,要交够学费才能提升认知。
俗话说的好:被套住了,就研究明白了
如果你有负债,家里没闲置的流动资金,尽量不要碰。
麻绳专挑细处断,有能抵抗风险的能力,并且脑袋清晰,该跑则跑,不和山寨谈恋爱。
不要总是想着能赚几倍,赚够你想要的。
普通人不要全职,除非你的资金很大,家里有矿。

以上是我被套几年的感悟
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5334 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 20ms · UTC 07:30 · PVG 15:30 · LAX 23:30 · JFK 02:30
Developed with CodeLauncher
♥ Do have faith in what you're doing.