mysql 事务级别

mysql 数据四种事务级别:Read Uncommitted,Read Committed,Repeatable Read,Serializable

Read Uncommitted,Read Committed 这个两个就不多做介绍了
主要说明一下Repeatable Read 这个是mysql 默认的事务级别
此事务级别的表现为,可重读:此事务内的查询,不受其他事务的影响,会坚持从本事务内查询,因此,这个事务内的同一个查询(查询的数据不经过本事务的修改),会一直是一样的
如事务A,中有一个sql select * from A where id>3,假设表A中只有id 1.2.3.5 四条数据, 如果整个表中没有对表A中id>3的数据做修改,那么本事务内无论什么地方什么时候查询这个sql都是同样的结果,结果为 5 ,如果另外一个事务B,修改了表A中id>3的数据,如插入一条数据 id = 4,那么在事务A中依然会查出结果为5,不会查出4,这就是为什么叫可重复读,其实现在表中有5条数据,但是对于事务A而已,现在依然是4条数据,引发的这种错误叫幻读;

另外可重复读的另一个特性:GAP锁
在某范围行进行更新操作时,范围内的数据,不允许有新的数据插入或者修改,当然范围内的数据也不能更新,前提是此表有主键,如果事务A在
修改 id in (2,3,6),那么在事务A提交前,其他事务不能插入id = 4或者5的数据了,此操作和主键没有关系的,但凡是在行数据字段范围内的都会出现这个限制,这个就保证了,在此事务内未完成前范围内更新的数据不会出现差异,保证了范围数据的可重读,具体操作如下
[img]
[img]http://dl2.iteye.com/upload/attachment/0120/2851/63368316-4336-37ae-a2ea-c986130f0c97.png[/img]
[/img]
[img]
[img]http://dl2.iteye.com/upload/attachment/0120/2853/6dc80510-0a2e-3534-b110-4374b8c7e9c2.png[/img]
[/img]

第二个事务会一直block 一直到超时或者第一个事务完成,这个就是GAP锁的牛逼之处了

总之,可重复读事务中,对于同一个查询,在本事务不对查询结果做有妨害的事情,查询的数据一直是一样的,就是其他事物对数据进行了修改,另外GAP锁保平安
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值