MySql学习笔记-01事务

事务隔离

1、隔离级别的通俗理解

  1. 读未提交:事务的修改都会被其他事务看见
  2. 读提交:一个事务提交后,都会被其他事务看见,无论其他事务有没有完成
  3. 可重复读: 一个事务在执行过程中,只会看到当前事务的变化
  4. 串行化: 多个事务不会同时进行,一个事务完成了才会进行下一个事务

2、隔离级别-可重复读 是如何实现的

版本快照 MVCC(多版本并发控制)

详细过程

  • 每个事务都有一个版本号
  • 当前事务的每一行操作都会记录到当前行版本号中,InnoDB每行数据都有多个版本
  • 读取每行数据时,不会读取还未提交事务的版本

3、为什么count(*)这么慢

原因:

由于上面所说的 MVCC(多版本并发控制)。对于count(*)语句只能一行行读取进行判断

案例:

赛事预言项目中,积分流水过大,后台分页执行使用count(*)导致慢执行

解决方案:

方案一:对于数据量的记录查询,分页查询尽量不要查询总数。
方案二:新建一张表来保存和维护计数

4、行级锁

什么是行级锁?

在一个事务中,对于修改的行会进行上锁,直到事务结束才会释放锁

为什么需要行级锁?

提高业务的并发度

死锁了怎么办?

方案一:保证业务不存在死锁
方案二:设置超时时间,超时释放,事务执行失败
方案三:死锁检测,回滚死锁中的一个事务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值