美文网首页
Isolation Level(数据库隔离级别)

Isolation Level(数据库隔离级别)

作者: Eafrey | 来源:发表于2019-07-15 23:21 被阅读0次

事务隔离是数据库处理的基础之一。隔离级别是在多个事务进行更改并同时执行查询时,对结果的性能、可靠性、一致性和可重现性进行微调的设置。

InnoDB提供了标准的四个事务隔离级别:READ UNCOMMITTED,READ COMMITTED,REPEATABLE READ和SERIALIZABLE。InnoDB的默认隔离级别是REPEATABLE READ。

四类数据库隔离级别和各自的并发副作用

Isolation Level Dirty Read Non Repeatable Read Phantom
READ UNCOMMITTED Yes Yes Yes
READ COMMITTED No Yes Yes
REPEATABLE READ No No Yes
SERIALIZABLE No No No

四类隔离级别

  • READ UNCOMMITTED(读未提交)

    即该事务可以读取其它事务已经修改但是没有提交的数据
    读取到未提交的数据,也称之为脏读
  • READ COMMITTED(读已提交)

    该事务只能读取其它事务已经修改并且提交的数据
  • REPEATABLE READ(可重复读)

    该事务可以保证在事务期间,读到的数据是一样的,即可重复读
  • SERIALIZABLE(序列化)

    序列化指数据库同一时间只能执行一个事务。此时数据库的并发 能力为1,很容易造成超时,一般情况下不会使用SERIALIZABLE作为数据库的隔离级别

三类并发副作用

  • Dirty Read(脏读)

    脏读指的是,事务读到了其它事务已经修改但还没有提交的数据,如果此时正在修改该数据的事务进行回滚操作,那么当前事务读到的数据就是脏数据了
  • Non Repeatable Read(不可重复读)

    不可重复读指的是在当前事务的执行期间,读取相同的数据,会得到不同的结果
  • Phantom(幻读)

    幻读指的是下面这么一种情况,事务A打算对表里指定范围内的数据进行操作,事务A首先读取了该范围内的数据(假如有30行),然后事务B在当前表内添加了5行数据(且在A将要操作的范围内),然后事务A对指定范围内的数据进行更新操作,更新完之后再次查询时,发现却对35行数据进行了更新,这样就产生了幻读

在MySQL中设置数据库隔离级别:

set session transaction isolation level READ UNCOMMITTED
set session transaction isolation level READ COMMITTED
set session transaction isolation level REPEATABLE READ
set session transaction isolation level SERIALIZABLE

在MySQL中查看数据库隔离级别:

SELECT @@global.tx_isolation;
SELECT @@session.tx_isolation;
SELECT @@tx_isolation;

MySQL语句事务操作:

start transaction
select * from stocks
insert into stocks (stock) values (1000)
commit
start transaction
select * from stocks
update stocks set stock = 10 where id = 2
roolback

相关文章

网友评论

      本文标题:Isolation Level(数据库隔离级别)

      本文链接:https://www.haomeiwen.com/subject/norakctx.html