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
    评论
MySQL事务锁机制是数据库管理系统中重要的概念。事务是一组数据库操作(例如插入、更新、删除等)的执行单元,要么全部成功执行,要么全部回滚。锁机制用于管理并发访问数据库时的数据一致性和并发控制。 在MySQL中,事务由以下四个特性组成,通常简称为ACID: 1. 原子性(Atomicity):事务中的操作要么全部完成,要么全部回滚,不存在部分完成的情况。 2. 一致性(Consistency):事务开始和结束时,数据库的状态必须是一致的。即事务执行前后,数据库中的数据必须满足预定义的完整性约束。 3. 隔离性(Isolation):并发执行的事务之间相互隔离,一个事务的执行不应该受其他事务的影响。 4. 持久性(Durability):一旦事务提交,其结果应该永久保存在数据库中,即使发生系统故障也不会丢失。 MySQL中的锁机制用于控制对数据的并发访问。主要有两种类型的锁:共享锁(Shared Lock)和排他锁(Exclusive Lock)。共享锁允许多个事务同时读取同一数据,但不允许并发写操作。排他锁则只允许一个事务独占地进行读写操作。 MySQL提供了多种级别的锁,包括表级锁、行级锁和页面锁。表级锁是最粗粒度的锁,对整个表进行加锁;行级锁是最细粒度的锁,只对操作的行进行加锁;页面锁介于表级和行级之间,对一定范围的行进行加锁。 通过合理使用事务锁机制,可以确保数据库的数据一致性和并发控制,避免脏读、不可重复读和幻读等问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值