好的,各位听众老爷们,早上好/下午好/晚上好! 欢迎来到“数据库并发控制奇妙夜”!我是你们的老朋友,江湖人称“Bug终结者”,今天咱们不聊代码,聊聊数据库里那些“你侬我侬”又“水火不容”的并发操作,特别是那个听起来高大上,实际上也挺高大上的MVCC(Multi-Version Concurrency Control)! 第一幕:并发世界的爱恨情仇 话说这数据库啊,就像一个热闹的菜市场,各种数据就像各种食材,老板(数据库)要保证顾客(应用)来买菜的时候,不会出现以下几种尴尬情况: 丢失更新(Lost Update): 两个顾客同时要买1斤猪肉,结果老板只卖出去了1斤,另一个顾客没买到,这叫“丢失更新”,就像你辛辛苦苦写了篇博客,结果被人覆盖了,欲哭无泪啊!😭 脏读(Dirty Read): 顾客A正在挑选一块猪肉,还没决定买不买,顾客B就看到了这块猪肉,并且以为已经卖出去了,结果顾客A又不要了,顾客B的信息就错了,这叫“脏读”,就像你看到女朋友发朋友圈说要分手,结果发现是被盗号了,白白伤心一场!💔 不可重复读(Non-Repeatable Read): 顾客A第一次看猪肉的价格是10块/ …
InnoDB 多版本并发控制(MVCC)原理与读一致性
各位老铁,双击点赞走一波!今天咱们来聊聊InnoDB存储引擎里的MVCC(多版本并发控制),这玩意儿听起来高大上,但其实就像咱们平时用的版本控制系统,比如Git,只不过它玩的是数据库里的数据版本。 开场白:数据库并发的那些烦恼事儿 想象一下,你正在银行柜台存钱,同时另一个人在ATM机上取钱。如果没有一套好的机制,银行的账目可能就会乱成一锅粥,你的钱存不进去,他的钱也取不出来,甚至更糟糕。 这就是数据库并发带来的问题。多个事务同时操作同一份数据,如果处理不当,就会出现各种奇奇怪怪的现象,比如: 脏读(Dirty Read): 你看到了别人还没提交的修改,结果人家后来又回滚了,你白高兴一场,读了个寂寞。就像你偷看了隔壁老王刚写的日记,结果他第二天又撕了,你看到的都是幻觉。 不可重复读(Non-repeatable Read): 你两次读取同一条数据,结果发现不一样了,中间被别人改过了。就像你早上称体重是120斤,晚上再称就变成125斤了,你怀疑人生了。 幻读(Phantom Read): 你两次执行同样的查询,结果返回的记录数不一样了,中间被别人插入或删除了数据。就像你数绵羊,数着数着发现 …