首页 > 数据库技术 > 详细

MySQL的事务隔离级别

时间:2020-01-05 23:42:02      阅读:142      评论:0      收藏:0      [点我收藏+]

MySQL InnoDB事务的隔离级别有四级,默认是“可重复读”(REPEATABLE READ)

1) 未提交读(READ UNCOMMITTED)
    另一个事务修改了数据,但尚未提交,而本事务中的SELECT会读到这些未被提交的数据(脏读)(隔离级别最低,并发性能高)。

2) 提交读(READ COMMITTED)
    本事务读取到的是最新的数据(其他事务提交后的)。问题是,在同一个事务里,前后两次相同的SELECT会读到不同的结果(不重复读)。
    会出现不可重复读、幻读问题(锁定正在读取的行)

3) 可重复读(REPEATABLE READ)
    在同一个事务里,SELECT的结果是事务开始时时间点的状态,因此,同样的SELECT操作读到的结果会是一致的,但是,会有幻读现象。会出幻读(锁定所读取的所有行)。

4) 串行化(SERIALIZABLE)
    读操作会隐式获取共享锁,可以保证不同事务间的互斥(锁表)。

四个级别逐渐增强,每个级别解决一个问题。
1) 脏读。另一个事务修改了数据,但尚未提交,而本事务中的SELECT会读到这些未被提交的数据。
2) 不重复读。解决了脏读后,会遇到,同一个事务执行过程中,另外一个事务提交了新数据,那么本事务先后两次读到的数据结果会不一致。
3) 幻读。解决了不重复读,保证了同一个事务里,查询的结果都是事务开始时的状态(一致性)。但是,如果另一个事务同时提交了新数据,本事务看不到另一个事物提交的数据。

MyISAM: 不支持事物,表级锁
InnoDB: 事物级存储引擎,支持行锁,事物ACID特性

事务隔离级别 脏读 不可重复读 幻读
读未提交(read-uncommitted)
不可重复读(read-committed)
可重复读(repeatable-read)
串行化(serializable)

MySQL的事务隔离级别

原文:https://www.cnblogs.com/gaopengpy/p/12153989.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!