Mysql实战45讲【3】事务隔离

以 InnoDB为例,剖析mysql在事务支持方面的特定实现

1、事务隔离级别

当数据库多个事务同时执行的时候,可能出现脏读、幻读、不可重复读的问题,为了解决这些问题,就有了事务隔离的概念。

事务隔离级别

  1. 读未提交
    一个事务没提交时,它的变更可以被其他事务看到

  2. 读提交
    一个事务提交后,他的变更才会被其他事务看到

  3. 可重复读
    一个事务执行过程中看到的数据,和这个事务启动时看到的数据一致(未提交变更对其他事务不可见)

  4. 串行化
    对同一行数据,写会加 写锁,读会加读锁,当出现读写锁冲突,后访问的事务必须在前一个事务执行完成,才能继续执行。

示例
C 字段的值为1
在这里插入图片描述
读未提交:v1=2,v2 =2 v3 =2

读提交: v1=1,v2=2,v3=2

可重复读: v1 =1,v2 = 1 v3 = 2

串行化: A 查询数据 设置 读锁,此时 B修改 设置写锁 会被锁住,需要等到 A 提交后 B才可继续执行。所以:v1=1,v2=1 v3=2

Oracle数据库的默认隔离级别其实就是“读提交”,因此对于一些从Oracle迁移到MySQL的应用,为保证数据库隔离级别的一致,你一定要记得将MySQL的隔离级别设置为“读提交”。

事务隔离的实现

在Mysql中每次修改操作都会记录一条 回滚操作
在这里插入图片描述
当系统判断没有事务需要用到这些回滚日志,回滚日志会被删除。

不要用长事务

长事务意味着,系统里会存在很老的事务视图,保留了大量的回滚日志,导致占用大量的存储空间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值