事务的隔离级别

事务的隔离级别

  1. read uncommitted:读未提交
  2. read commited:读已提交(Oracle的默认事务隔离级别)
  3. repeatable read:可重复读(MySQL默认的事务隔离级别)
  4. Serializable:串行化

注意:这四个隔离级别安全性一次递增,但是效率是一次递减的。

隔离级别对应的情况:

隔离级别/问题 脏读(Dirty read) 不可重复读(Unrepeatable read) 幻读(Phanton read)
read uncommitted 可能 可能 可能
read commited 不可能 可能 可能
repeatable read 不可能 不可能 可能
Serializable 不可能 不可能 不可能

脏读(Dirty read):脏读又称无效数据的读出,是指在数据库访问中,事务T1将某一值修改,然后事务T2读取该值,此后T1因为某种原因撤销对该值的修改,这就导致了T2所读取到的数据是无效的。

不可重复读(Unrepeatable read):在一个事务内,多次读同一个数据。在这个事务还没有结束时,另一个事务也访问该同一数据。那么,在第一个事务的两次读数据之间。由于第二个事务的修改,那么第一个事务读到的数据可能不一样,这样就发生了在一个事务内两次读到的数据是不一样的,因此称为不可重复读,即原始读取不可重复。

幻读(Phanton read):幻读是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,比如这种修改涉及到表中的“全部数据行”。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入“一行新数据”。那么,以后就会发生操作第一个事务的用户发现表中还存在没有修改的数据行,就好象发生了幻觉一样.一般解决幻读的方法是增加范围锁RangeS,锁定检索范围为只读,这样就避免了幻读。

MySQL查询隔离级别:select @@transaction_isolation;

MySQL设置隔离级别:set global transaction isolation level 级别字符串;

原文地址:https://www.cnblogs.com/zhuobo/p/10697602.html