文件名称:事务的四种隔离级别-中国大学mooc---《机器人操作系统入门》课程
文件大小:3.93MB
文件格式:PDF
更新时间:2024-07-12 21:46:53
MyS
16.6 事务的四种隔离级别 前文中提到,事务的隔离性受到隔离级别的影响。那么事务的隔离级别是什么呢?事务的隔离级 别可以认为是事务的"自私"程度,它定义了事务之间的可见性。隔离级别分为以下几种: 1.READ UNCOMMITTED(未提交读)。在 RU 的隔离级别下,事务 A 对数据做的修改,即使没有提 交,对于事务 B 来说也是可见的,这种问题叫脏读。这是隔离程度较低的一种隔离级别,在实际运用 中会引起很多问题,因此一般不常用。 2.READ COMMITTED(提交读)。在 RC 的隔离级别下,不会出现脏读的问题。事务 A 对数据做的 修改,提交之后会对事务 B 可见,举例,事务 B 开启时读到数据 1,接下来事务 A 开启,把这个数据 改成 2,提交,B 再次读取这个数据,会读到 新的数据 2。在 RC 的隔离级别下,会出现不可重复读 的问题。这个隔离级别是许多数据库的默认隔离级别。 3.REPEATABLE READ(可重复读)。在 RR 的隔离级别下,不会出现不可重复读的问题。事务 A 对 数据做的修改,提交之后,对于先于事务 A 开启的事务是不可见的。举例,事务 B 开启时读到数据 1, 接下来事务 A 开启,把这个数据改成 2,提交,B 再次读取这个数据,仍然只能读到 1。在 RR 的隔离 级别下,会出现幻读的问题。幻读的意思是,当某个事务在读取某个范围内的值的时候,另外一个事 务在这个范围内插入了新记录,那么之前的事务再次读取这个范围的值,会读取到新插入的数据。 Mysql 默认的隔离级别是 RR,然而 mysql 的 innoDB 引擎间隙锁成功解决了幻读的问题。 4.SERIALIZABLE(可串行化)。可串行化是 高的隔离级别。这种隔离级别强制要求所有事物串行 执行,在这种隔离级别下,读取的每行数据都加锁,会导致大量的锁征用问题,性能 差 为了帮助理解四种隔离级别,这里举个例子。如图 1,事务 A 和事务 B 先后开启,并对数据 1 进 行多次更新。四个小人在不同的时刻开启事务,可能看到数据 1 的哪些值呢?