Mysql事务和锁机制

事务特点(ACID)

描述事务的时候要和存储引擎挂钩
并非情况下
Atom 原子性 undolog(数据库里面的一些日志)
Consistency 一致性
Isolation 隔离性 锁
Durability 持久性 rodolog

一致性是事务的根本追求,某些情况下回对事务的一致性造成破坏

事务的并发执行
事务故障或系统故障

数据库通过并非控制技术和日志恢复技术来避免这种情况

并发控制保证了事务的隔离性,是数据库的一致性并不会因为并发执行操作被破坏
日志恢复技术保证了事务的原子性,使得一致性状态不会因为事务或系统故障被破坏。同时对已经提交的对数据库的修改不会因为系统崩溃而丢失,保证了事务的持久性

undolog 属于Innodb存储引擎
binglog、errorlog、慢查询日志(需要手动开启)归属于server层次的

锁:
	innodb:共享锁、排它锁
	myisam:共享锁、独占锁
	行锁、间隙锁gap(某一个范围)、next-key(结合上面两个)
	自增锁

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

原理

原子性

实现原理:undo log(内存)(回滚日志)
1、Undo Log是为了实现事务的原子性,在MySQL数据库InnoDB存储引擎中,还用Undo Log来实现多版本并发控制,简称: MVCCD
2、在操作任何数据之前, 首先将原来数据备份到一个地方(这个存储数据备份的地方称为Undo Log)。然后进行数据的修改。如果出现了错误或者用户执行了ROLLBACK语句,系统可以利用Undo Log中的备份将数据恢复到事务开始之前的状态
!!!注意: undo log是逻辑日志(对应回滚,提交后删除),可以理解为:
当delete条记录时,undo log中会记录条对应的insert记录
当insert一条记录时,undo log中会记录条对应的delete记录(+10 -10)
当update一条 记录时,它记录一条对应相反的update记录(-10 +10)
查询一条数据,数据一定是在磁盘的,加载到内存上的,逻辑单元以页为单位,存储在磁盘上的一个逻辑块,innodb16k,逻辑日志就是相当于当前的一个行记录,针对于记录而言的,不是针对页。
序列不回滚,id不连续了
mvcc当前读,快照读
多版本,不可重复的读,幻读

持久性

持久性原理:Redo Log(前滚日志)内存–>磁盘
和Undo Log相反,Redo Log记录的是新数据的备份。在事务提交前,只要将Redo Log持久化即可,不需发将数据持久化。当系统崩溃时, 虽然数据没有持久化,但是Redo Log经持久化。系统可以根据Redo Log的内容,将所有数据恢复到最新的状态(innodb_ flush log. at tx commit)

在这里插入图片描述
在这里插入图片描述

默认级别1
可以设置2,服务挂了没关系,os在就行

在这里插入图片描述

redo 业务当前很忙,循环写进数据库,写完之后擦掉,预写日志

隔离级别

.事务具有隔离性,理论上来说事务之间的执行不应该相互产生影响,其对数据库的影响应该和它们串行执行时一样。
然而完全的隔离性会导致系统并发性能很低降低对资源的利用率,因而实际上对隔离性的要求会有所放宽,这也会-定程度造成对数据库一致性要求降低
. SQL标准为事务定义了不同的隔离级别,从低到高依次是
读未提交(READ UNCOMMITTED):对事务处理的读取没有任何限制,不推荐
读已提交(READ COMMITTEDI:
可重复 读(REPEATABLE READ) <mysql默认>
串行化(SERIALIZABLE)
解决幻读靠的是间隙锁next-key

在这里插入图片描述

隔离实验

不同隔离级别对应不同版本数据
undoLog保证mvcc版本
read commit 最近持久化commit数据版本
repeat 事务开启前的一个版本

关闭自动提交

在这里插入图片描述

设置不同隔离级别

在这里插入图片描述

未提交读

在这里插入图片描述

在这里插入图片描述

提交读

脏读消失

在这里插入图片描述

在同一个事务里面不可重复读

在这里插入图片描述

可重复读

解决了不可重复读

在这里插入图片描述

幻读

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

解决

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

超时
环图(深度遍历)

故障及恢复

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值