2021-10-30

什么是事务,事务的基本要素,事务解决了什么问题
隔离级别是怎么来的,不同的隔离级别带来了哪些问题
事务中的锁有哪些,解决了哪些问题,又带了那么些问题
mysql中的事务是怎么实现的,mysql中的锁有哪些
当前读和快照读是什么

事务的概念

事务是逻辑上的一组操作,要么都执行,要么都不执行。
实际上事务是维持数据模型的一致性,保障软件系统中的数据模型能和现实世界对应的模型保持一致。
事务的四个要素
ACID
原子性: 一组操作,要么都执行成功,要么都不执行
一致性: 数据模型与现实世界保持一致
隔离性: 并发访问数据库时,一个用户的事务不被其他事务所干扰
持久性: 事务提交成功后,对数据的影响是持久的,不能因任何因素导致影响消失
数据库中的操作相当于现实世界中状态的转换,必须符合现实世界的状态转换规则。
一致性就是维持根本要素,而实现一致性,必须要有原子性。因为现实生活中的一个动作可能对应数据模型中的多个操作,在软件系统中必须实现多个操作的原子性。
在提高性能中增加了缓存和并发,缓存引入了中间缓存层,必须保证写入缓存后不能发生数据安全问题,引入了持久性要素。比如mysql中的持久性就是有redo log和bin log来实现。并发带来了事务间的交互问题,通过适度破坏一致性实现不同的隔离性提高并发性能。

事务的隔离级别

隔离性和一致性相互矛盾的,为了更高的性能,降低一致性要求,带来了不少问题。

破坏一致性带来的问题 解决方案 解决方法
回滚覆盖(写与写) 读未提交 read uncommited 对写操作加”持续x锁“
脏读(读与写) 读已提交 read commited 同上,对读操作加”临时s锁“
不可重复度(读与写) 可重复读 repeatable read 对写操作加”持续x锁“,对读操作加”持续s锁“
提交覆盖(写与写) 序列化 serializable 表级锁
幻读(读与写) 序列化 serializable 表级锁

解决方案是引入锁解决,LBCC 基于锁的并发控制
共享锁 s锁
排它锁 x锁

表级锁
行级锁(持续锁、临时锁、读锁s、写锁x)

锁可以解决上面问题,但是性能还有差距,读读可并发,读写不能,mysql在实现的时候进行的优化
InnoDb 会为每一行记录增加几个隐含的“辅助字段”,(实际上是 3 个字段:一个隐式的 ID 字段,一个事务 ID,还有一个回滚指针),事务在写一条记录时会将其拷贝一份生成这条记录的一个原始拷贝,写操作同样还是会对原记录加锁,但是读操作会读取未加锁的新记录,这就保证了读写并行

mysql的MVCC

表锁:mysql服务器实现的锁
行锁:innodb引擎实现

隔离级别 mvcc不支持原因
读未提交 read uncommited 每次读取都是最新数据
读已提交 read commited
可重复读 repeatable read
序列化 serializable 每次读取都会加读锁

RU和S级别不需要优化,RC和RR进行的优化 MVCC

mvcc如何实现读写并发
快照读和当前读
RR模式中的间隙锁
当前读适用的三个场景:
select … lock in share mode; select … for share;
select … for update;
update/delete/insert into/replace into

RR和RC的快照读的不同

innodb中行锁的类型和作用
记录锁
间隙锁
临键锁(next-key lock) 间隙锁和记录锁的组合
意向插入锁

锁的类型 lock-type(按照粒度区分)
锁的模式 lock-mode(按照左右区分)

innodb的RR是否解决了幻读问题,特殊情况(一个事务中第二次查询前做了更新操作)

自动提交设置和状态查询
// 查询mariadb版本
select @@version;

// 查询全局和会话事务隔离级别
select @@global.tx_isolation, @@session.tx_isolation;

select @@autocommit;
set autocommit=1;

start transaction;
commit;
rollback;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值