mysql 事务隔离级别和相关的锁及锁的类型

隔离级别

mysql 的事务隔离级别有4种,由高到低分别是:READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE。其中REPEATABLE READ是系统mysql的默认的。

下面具体说明下:

Read uncommitted 读未提交

READ UNCOMMITTED是限制性最弱的隔离级别。由于该级别忽略其它事务放置的锁。使用READ UNCOMMITTED级别运行的事务,能够读取还未由其它事务提交的改动后的数据值,这些行为称为“脏”读。我们所说的脏读,例如:两个并发的事务,“事务A:小明网银行卡上存钱”、“事务B:小红查询小明工资账户”,事务B读取了事务A尚未提交的数据。比方,事务1改动一行,事务2在事务1提交之前读取了这一行。

假设事务1回滚,事务2就读取了一行没有提交的数据。这种数据我们认为是不存在的。

Read committed 读提交

该级别通过指定语句不能读取其它事务已改动可是尚未提交的数据值。禁止运行脏读。在当前事务中的各个语句运行之间,其它事务仍能够改动、插入或删除数据。从而产生无法反复的读操作。或“影子”数据。比方,事务1读取了一行。事务2改动或者删除这一行而且提交。假设事务1想再一次读取这一行,它将获得改动后的数据或者发现这一样已经被删除。因此事务的第二次读取结果与第一次读取结果不同,因此也叫不可反复读。

大多数数据库的默认级别就是Read committed。比方Sql Server , Oracle。

Repeatable read 反复读

REPEATABLE READ是比READ COMMITTED限制性更强的隔离级别。

该级别包含READ COMMITTED,而且另外指定了在当前事务提交之前。其它不论什么事务均不能够改动或删除当前事务已读取的数据。并发性低于 READ COMMITTED。由于已读数据的共享锁在整个事务期间持有,而不是在每一个语句结束时释放。这个隔离级别仅仅是说,不可以改动和删除,可是并没有强制不能插入新的满足条件查询的数据行。此可以得出结论:REPEATABLE READ隔离级别保证了在同样的查询条件下,同一个事务中的两个查询。第二次读取的内容肯定包换第一次读到的内容。注:Mysql的默认隔离级别就是Repeatable read。

Serializable 序列化

SERIALIZABLE 是限制性最强的隔离级别,由于该级别锁定整个范围的键。并一直持有锁,直到事务完毕。该级别包含REPEATABLE READ。并添加了在事务完毕之前,其它事务不能向事务已读取的范围插入新行的限制。比方,事务1读取了一系列满足搜索条件的行。事务2在运行SQL statement产生一行或者多行满足事务1搜索条件的行时会冲突。则事务2回滚。这时事务1再次读取了一系列满足同样搜索条件的行。第二次读取的结果和第一次读取的结果同样。

事务的并发问题

&#x

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值