Mysql事务和锁机制

事务特点(ACID)

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

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

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

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

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

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

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

Mysql事务和锁机制_第1张图片

Mysql事务和锁机制_第2张图片
在这里插入图片描述

原理

原子性

实现原理: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)

Mysql事务和锁机制_第3张图片
Mysql事务和锁机制_第4张图片

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

Mysql事务和锁机制_第5张图片

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

隔离级别

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

Mysql事务和锁机制_第6张图片

隔离实验

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

关闭自动提交

Mysql事务和锁机制_第7张图片

设置不同隔离级别

在这里插入图片描述

未提交读

Mysql事务和锁机制_第8张图片

Mysql事务和锁机制_第9张图片

提交读

脏读消失

Mysql事务和锁机制_第10张图片

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

Mysql事务和锁机制_第11张图片

可重复读

解决了不可重复读

Mysql事务和锁机制_第12张图片

幻读

Mysql事务和锁机制_第13张图片

Mysql事务和锁机制_第14张图片

Mysql事务和锁机制_第15张图片

解决

在这里插入图片描述

Mysql事务和锁机制_第16张图片

Mysql事务和锁机制_第17张图片

超时
环图(深度遍历)

故障及恢复

Mysql事务和锁机制_第18张图片

你可能感兴趣的:(Linux面试)