是数据库事务的ACID四大特性之一,指多个并发事务在执行过程中应相互隔离)
隔离性Isolation是数据库事务的ACID四大特性之一指多个并发事务在执行过程中应相互隔离、互不干扰即一个事务的执行不应被其他并发事务所影响从而保证数据的一致性和正确性。隔离性通过事务隔离级别如读未提交、读已提交、可重复读、串行化来实现不同级别在性能与一致性之间进行权衡级别越高隔离越强但并发性能越低级别越低并发性越好但可能出现脏读、不可重复读或幻读等问题。常见的隔离级别及其典型问题读未提交Read Uncommitted最低级别允许读取未提交的数据 → 可能发生脏读读已提交Read Committed只能读取已提交的数据 → 避免脏读但可能不可重复读可重复读Repeatable Read同一事务内多次读取结果一致 → 避免脏读和不可重复读但可能幻读MySQL InnoDB通过间隙锁解决部分幻读串行化Serializable最高级别强制事务串行执行 → 完全避免并发异常但严重牺牲并发性能。实现机制通常依赖于锁如行锁、表锁、间隙锁或无锁技术如MVCC多版本并发控制例如 PostgreSQL 和 MySQLInnoDB均采用 MVCC 实现高并发下的快照读兼顾隔离性与性能。MySQLInnoDB引擎默认隔离级别为可重复读Repeatable Read而PostgreSQL默认为读已提交Read Committed这一差异源于二者在设计目标、历史演进、并发控制机制及对“一致性快照”语义的不同权衡✅MySQL选择RR的动因解决主从复制一致性问题历史原因早期MySQL基于语句级复制Statement-Based Replication, SBR若使用RC级别在同一事务中多次查询可能因并发更新导致主库与从库执行结果不一致例如UPDATE ... WHERE SELECT类操作。RR通过MVCC提供事务内一致性快照consistent snapshot确保事务内多次读取结果稳定使SBR更可靠。虽然后续支持ROW模式复制但默认级别保持向后兼容。InnoDB的强MVCC实现InnoDB在RR级别下为每个事务分配一个全局唯一的事务IDtrx_id并基于聚簇索引记录的DB_TRX_ID和DB_ROLL_PTR构建版本链配合间隙锁Gap Lock/临键锁Next-Key Lock有效抑制幻读尤其在范围查询DML场景使得RR在实践中比标准SQL定义更严格SQL标准中RR不保证无幻读但InnoDB做到了部分规避。用户预期与简化开发开发者常期望“事务内读一致性”RR天然满足该直觉降低应用层手动加锁或重试逻辑的复杂度。✅PostgreSQL选择RC的动因遵循SQL标准且强调简单性与高性能SQL标准将RC定义为“最低保证无脏读”的合理默认PostgreSQL严格遵循标准并认为“可重复读”属于需显式声明的高级需求。MVCC实现机制不同PostgreSQL的MVCC基于行版本tuple visibility和事务快照snapshot每个查询开始时获取一个当前活跃事务ID快照只看到该快照前已提交的数据。因此RC级别下每次SELECT都获取新快照→ 同一事务内不同查询可能看到不同数据不可重复读RR级别下整个事务复用首次查询的快照→ 实现真正可重复读且完全避免幻读因其快照包含所有已提交事务状态不含未提交变更。由于PG的RR开销与RC接近快照复用成本低它仍允许用户按需升级但默认倾向更轻量、更符合直觉的RC。无锁设计哲学PG避免使用间隙锁等阻塞机制依赖纯MVCC 行级版本判断RC已能很好平衡并发与正确性过度隔离反而增加锁竞争和死锁风险。 关键区别总结维度MySQL (InnoDB)PostgreSQL默认隔离级别REPEATABLE READREAD COMMITTED快照粒度事务启动时创建第一次SELECT时→ 整个事务共享每条SQL语句开始时创建 → 同事务内可变幻读处理RR下通过间隙锁/临键锁抑制非纯MVCCRR下靠快照一致性彻底避免纯MVCC设计哲学“事务内一致性优先”兼顾复制可靠性“标准兼容 高并发优先”默认最小必要隔离因此这不是优劣之分而是架构取舍MySQL以“写一致性”和“复制鲁棒性”为导向PostgreSQL以“标准合规”和“读扩展性”为导向。