innodb-四种隔离级别

四种隔离级别


innodb有四种标准的隔离级别

READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE.

默认隔离级别是REPEATABLE READ

 

用户可以为一个session中或所有的connection设置事务隔离级别属性

 

 

innodb在不同的隔离级别下使用不同的锁策略,使用默认的RR级别对ACID要求合规的重要数据可以基本满足高度一致性。

 

 

如果对数据的一致性要求不高,可以使用较为松式的策略,例如:RC、RU

 

innodb-SERIALIZABLE隔离级别是一种最严格的规则,一般用于XA事务或解决并发死锁故障

 

 

RR级别


特性1.一致性读的方式是在第一次读时建立快照

特性2.在锁定读、update、delete时,加锁方式依赖于查询的方式,即是否是根据唯一索引查询, 如果是则锁定行,如果不是则可能会产生间隙锁

 

RC级别:


特性1.一致性读的方式是每次读取和更新都会刷新快照

特性2.在锁定读、update、delete时,加锁方式是只锁定索引记录,不锁间隙

特性3.在RC级别下binlog模式只支持row-based,即使配置了binlog_format=MIXED,实际也是采用row-based

特性4.在RC级别下,根据非索引字段更新,只会锁定where条件下对应的行,不会锁定全表行记录

在RC级别下,因为没有间隙锁的保护,这时会出现幽灵问题,也可以叫做幻读

RC级别作用和启用innodb_locks_unsafe_for_binlog配置类似,但两者也有区别:
1.innodb_locks_unsafe_for_binlog可以被设置成全局/所有session,但RC级别可以设置为所有session/单个session

2.innodb_locks_unsafe_for_binlog只能在mysql服务启动前设置,RC级别可以在服务运行时设置

 

RU级别:


特性.读取不具有一致性,存在脏读问题

 

 

SERIALIZABLE级别


特性.在atuocommit关闭的情况下,所有的select操作都会加共享锁

你可能感兴趣的:(数据库)