重新整理mysql基础篇—————mysql事务[三](代码片段)

你永远想象不到,一个光鲜亮丽的Application,有多么 你永远想象不到,一个光鲜亮丽的Application,有多么肮脏的Code     2022-11-29     530

关键词:

前言

简单整理一下事务。

正文

事务有四大特性:

1.原子性(atomicity)

一个事务必须被视为一个不可分割的最小单元。

2.一致性(consistency)

数据库总是从一个一致性的状态转换到另一个一致性的状态。

很多人对事务的一致性和原子性可能会有偏差。要理解这个东西呢,首先要抛开mysql,或者我们常见的数据库sql server,mongodb。

单纯来理解数据库的事务。

假如有两个事务,事务a和事务b。

假设A和B的两个账号,a账户是500块,b账户是300块。

里面有一个限制就是A账号不能大于600块。

事务a 的逻辑是给A增加100块。然后给B减少100块。

事务b 的逻辑是给B减少100块。然后给A增加100块。

现在事务a,开始执行,做好备份做回滚(500,300),然后给A增加了100块,A现在是600。

现在事务b,开始执行,做好备份做回滚(600,300),然后给B减少了100块,现在B是200。

现在事务a开始执行,给B减少100,B变成了100。也急速说b事务提交的是(600,100)

现在b开始执行,但是报错了,遇到了A不能高于600的限制,现在开始回滚,那么回滚为(600,300)。

那么这个时候就变成了(600,300)了。那么请问事务a和事务b 是否符合原子性?

首先分析事务a,现在能做的,全部执行了。那么是符合原子性的。

然后分析事务b,的确是回滚了,也是符合原子性的。

这有疑问吗?没有吧。

那么事务a和事务b是否符合一致性呢?

a是否符合一致性呢? 数据库总是从一个一致性的状态转换到另一个一致性的状态。

一致性的要求是B账户减少100块,A账户多出100块了。这是一致性的要求。

数据库一开始是:(500,300),然后a提交的时候(600,100),这显然不符合。

b事务其实是符合一致性的,一开始是(500,300),回滚也是(500,300),这没错。

那么是否一致性就一定要原子性呢?

a=a+1;
try
  b=b-1
catch
  a=a-1;

这样其实也是可以一致性的。

那么数据库为什么不这么干呢?比如说 update test set a=a-1;

这个时候回滚的时候还得给你生成一个update test set a=a+1。这是简单的,如果是复杂的,这是要数据库称为人工智能吗?数据库都会傻掉的。

要实现一致性,原子性的成本应该是最低的,但是单单原子性是不能实现一致性的。

3.隔离性

上面我们知道单单原子性是没有实现一致性。那么隔离性就是在原子性的基础上增加一些,一些限制条件那么就可以实现一致性。

比如说,每个事务只能串行执行,这个时候也说符合的,这也是一种隔离级别。但是如果是串行,就不满足并发了,所以就有其他隔离级别了,或者说其他隔离方式。

  1. 持久性

一旦事务提交,则其所做的修改就会永久保存到数据库中。可能有人说这不是废话吗?事务做的修改不就是要保持带数据文件中,能够持久化吗?

这里面的持久性,表示的更多的是一种方案。持久化是有很多方式的,怎么确保你的持久化方案可行呢?比如说一个事务要修改4条语句分别在四张表,那么怎么确保这四条语句能够全部写入进去呢?会不会写到第二条的时候系统崩溃呢?

如果出现上面的问题,该怎么处理?这就是持久性的重要性了。前三个都是强调语句执行,最后一个强调存储。

以上只是个人整理,如有错误,望请指点。

下一节,事务的隔离。

重新整理mysql基础篇—————表锁和全局锁[六](代码片段)

前言锁从大的方面可以分为:1.全局锁2.表锁3.行锁正文全局锁全局锁就是对整个数据加上读锁。在mysql中,加入全局锁的命令就是:Flushtableswithreadlock(FTWRL)这个时候会让整个数据库处于只读状态,之后其他线程的数据更新、数据定... 查看详情

重新整理mysql基础篇—————索引模型[五]

...有些为了能够多建索引,通过从多个从库中读取数据,再重新整合数据来建立新的数据结构,建立新的索引。hash表在索引模型中hash表非常常见,这里值的是应用内存中的索引模型,而不是数据库中的索引模型。因为现在数据库... 查看详情

《mysql45讲》基础篇总结(代码片段)

...习笔记。根据基础篇的内容总结归纳为几部分,分类整理,并添加许多自定义的图片,看完后对MySQL的结构、日志系统、事务、索引、锁。会有新的认识。目前已有基础篇,还会持续更新…文章目录极客时间:... 查看详情

mysql原理篇之事务--08(代码片段)

...点小结引言上一篇文章。本文为事务原理篇,如果对事务基础概念还有不清楚的,建议看一下事务基础篇,假设我们有如下两条sql语句://大忽悠转账给小朋友10元//大忽悠账号扣除10元UPDATEaccountSETbalance=balance-10WHEREid 查看详情

mysql基础篇之事务真的是隔离的吗?--08(代码片段)

Mysql基础篇之事务真的是隔离的吗?--08引言“快照”在MVCC里是怎么工作的?更新逻辑小结引言我在第3篇文章和你讲事务隔离级别的时候提到过,如果是可重复读隔离级别,事务T启动的时候会创建一个视图read-view&... 查看详情

711-mysql基础篇

MySQL基础篇MySQL是什么?MySQL是一个传统的RDBM数据库,也就是关系型数据库,广泛应用于OLTP场景。你提到了OLTP,能说说它和OLAP的区别是什么吗?OLTP(联机事务处理)是传统的关系型数据库的主要应用&#... 查看详情

spring事务专题事务的基本概念,mysql事务处理原理

前言本专题大纲:专栏大纲我重新整理了大纲,思考了很久,决定单独将MySQL的事务实现原理跟Spring中的事务示例分为两篇文章,因为二者毕竟没有什么实际关系,实际上如果你对MySQL的事务原理不感兴趣也可以直接跳过本文,... 查看详情

mysql基础篇之事务隔离---03(代码片段)

Mysql基础篇之事务隔离---03引言隔离性与隔离级别事务隔离的实现事务的启动方式小结补充引言提到事务,你肯定不陌生,和数据库打交道的时候,我们总是会用到事务。最经典的例子就是转账,你要给朋友小王转... 查看详情

mysql事务基础知识

前言学习/导流:小林coding-事务篇学习意义理解MySQL如何去处理并发问题,借鉴其思想存储作为应用的关键能力,而事务作为关系型数据库的关键概念,掌握很必要,也为分布式事务学习做奠基相关说明该篇博... 查看详情

mysql基础篇(06):事务管理,锁机制案例详解(代码片段)

本文源码:GitHub·点这里||GitEE·点这里一、锁概念简介1、基础描述锁机制核心功能是用来协调多个会话中多线程并发访问相同资源时,资源的占用问题。锁机制是一个非常大的模块,贯彻MySQL的几大核心难点模块:索引,锁机制... 查看详情

面向校招mysql知识点整理(代码片段)

目录基础数据库三范式InnoDB与MyISAMMySQL执行查询过程索引索引模型哈希模型有序数组模型搜索树模型BST和AVL等二叉树模型B树模型B+树主键索引和非主键索引回表索引维护(页分裂与页合并)覆盖索引最左前缀原则前缀索引索引下... 查看详情

面向校招mysql知识点整理(代码片段)

目录基础数据库三范式InnoDB与MyISAMMySQL执行查询过程索引索引模型哈希模型有序数组模型搜索树模型BST和AVL等二叉树模型B树模型B+树主键索引和非主键索引回表索引维护(页分裂与页合并)覆盖索引最左前缀原则前缀索引索引下... 查看详情

清华学长熬夜20天整理出来的“数据库mysql”基础篇小白必看!

我是二黑,一个快要秃头的测试人欢迎点赞收藏⭐留言如有错误敬请指正!我收集了一些软件测试资料,关注我公众号:程序员二黑,免费领取!最困难的时候,也就是我们离成功不远的时候!文... 查看详情

mysql事务篇:acid原则事务隔离级别及事务机制原理剖析

引言众所周知,​​MySQL​​数据库的核心功能就是存储数据,通常是整个业务系统中最重要的一层,可谓是整个系统的“大本营”,因此只要​​MySQL​​存在些许隐患问题,对于整个系统而言都是致命的。那此刻不妨思考一... 查看详情

mysql基础篇(01):经典实用查询案例,总结整理(代码片段)

本文源码:GitHub·点这里||GitEE·点这里一、连接查询图解示意图1、建表语句部门和员工关系表:CREATETABLE`tb_dept`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT‘主键ID‘,`deptName`varchar(30)DEFAULTNULLCOMMENT‘部门名称‘,PRIMARYKEY(`id`))ENGINE=InnoDBAUTO_INCREM... 查看详情

《mysql高级篇》十二mysql事务日志

文章目录​​1.redo日志​​​​1.1为什么需要REDO日志​​​​1.2REDO日志的好处、特点​​​​1.好处​​​​2.特点​​​​1.3redo的组成​​​​1.4redo的整体流程​​​​1.5redolog的刷盘策略​​​​1.6不同刷盘策略演示​​​... 查看详情

「mysql高级篇」mysql日志事务原理--undologredologbinlog两阶段提交

...edolog、全量备份的binlog等等,而这些日志,也刚好是我们事务的原理 查看详情

mysql入门篇(代码片段)

...reate语法创建b.通过alter语法创建删除索引索引的执行过程事务事务的定义事务的特征(ACID)事务的使用1、查看事务是否自动提交2、修改是否自动提交3、事务操作3.1、开启事务:begin或者starttran 查看详情