Bootstrap

MYSQL隔离级别及MVCC

1、隔离级别

一、读未提交(Read Uncommitted)​

场景:你和小明同时改一份文档。小明刚改完但没保存,你就能看到他改的内容。
问题:如果小明最后放弃修改,你看到的就是“假数据”(脏读)

口语化总结

  • 规矩:允许看别人没保存的草稿。
  • 风险:可能看到错误信息,比如看到小明写了一半的错别字。
  • 适用:对数据准确性要求低,比如统计大概的访问量

二、读已提交(Read Committed)​

场景:小明必须保存文档后,你才能看到他改的内容。但如果你反复看同一份文档,小明中间又保存了其他修改,你每次看到的内容可能不同(不可重复读)

口语化总结

  • 规矩:只能看别人保存后的正式版。
  • 风险:同一件事查两次结果可能不同,比如查银行卡余额,第一次 1000 元,第二次变成 900 元(小明中途转账了)。
  • 适用:大多数日常场景,比如电商订单查询

三、可重复读(Repeatable Read)​

场景:你打开文档后,系统给你拍了个“快照”。不管小明怎么改,你看到的都是快照里的内容。但如果你查“所有文档”,小明新增的文档会被算进来(幻读)
口语化总结

  • 规矩:你打开文档时锁定当前版本,别人改不了你看的数据。
  • 风险:查总数可能变多,比如购物车显示 3 件商品,结算时变成 4 件(小明偷偷加了一件)。
  • 适用:需要稳定数据的场景,比如财务对账(MySQL 默认选这个)

四、串行化(Serializable)​

场景:你和小明不能同时改文档,必须一个一个来。
口语化总结

  • 规矩:完全禁止多人同时操作,像单线程排队。
  • 风险:速度慢,容易卡顿。
  • 适用:极端重要场景,比如银行转账

总结对比

隔离级别
;