前言

简单整理一下事务。

正文

事务有四大特性:

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 基础篇————— mysql 事务[三]的更多相关文章

  1. mysql基础篇-----mysql简介

    2017-04-19 一.mysql简介 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 ...

  2. [MySQL实战-Mysql基础篇]-mysql架构

    1.基本组成 下面是mysql的基本架构示意图  图一 图二 我们可以从图上看出,mysql大体分为两个部分,一个是server层,另一个是引擎层. server层中包含了连接器.查询缓存.分析器.优 ...

  3. [MySQL实战-Mysql基础篇]-mysql的日志

    参考文章: https://www.cnblogs.com/f-ck-need-u/archive/2018/05/08/9010872.html https://dev.mysql.com/doc/ ...

  4. 重新整理 mysql 基础篇————— 介绍mysql[一]

    前言 准备整理mysql的基础篇了,前面整理了sql语句序列的的<sql 语句系列(八百章)>,感觉很多用不上,就停下来了,后续还是会继续整理. mysql 基础篇主要是对一些基础进行整理 ...

  5. 【目录】mysql 基础篇系列

    随笔分类 - mysql 基础篇系列 mysql 开发基础系列22 SQL Model(带迁移事项) 摘要: 一.概述 与其它数据库不同,mysql 可以运行不同的sql model 下, sql m ...

  6. (3.12)mysql基础深入——mysql日志文件/其他文件(socket/pid/表结构/Innodb)

    (3.12)mysql基础深入——mysql日志文件/其他文件(socket/pid/表结构/Innodb) 关键词:mysql日志文件,mysqldumpslow分析工具 目录:日志文件的分类 1. ...

  7. 前端总结·基础篇·CSS(三)补充

    前端总结系列 前端总结·基础篇·CSS(一)布局 前端总结·基础篇·CSS(二)视觉 前端总结·基础篇·CSS(三)补充 目录 一.移动端 1.1 视口(viewport) 1.2 媒体查询(medi ...

  8. 前端总结·基础篇·JS(三)arguments、callee、call、apply、bind及函数封装和构造函数

    前端总结系列 前端总结·基础篇·CSS(一)布局 前端总结·基础篇·CSS(二)视觉 前端总结·基础篇·CSS(三)补充 前端总结·基础篇·JS(一)原型.原型链.构造函数和字符串(String) 前 ...

  9. (3.16)mysql基础深入——mysql字符集

    (3.16)mysql基础深入——mysql字符集 关键字:mysql字符集,mysql编码 目录 1.概念 2.常用的字符编码 3.查看mysql字符集 [3.1]查看服务器支持的字符集 [3.2] ...

随机推荐

  1. Windows PE资源表编程(枚举资源树)

    资源枚举 写一个例子,枚举一个PE文件的资源表.首先说下资源相关的作为铺垫. 1.资源类型也是PE可选头中数据目录的一种.位于第三个类型. 2.资源目录分为三层.第四层是描述文件相关的.这些结构是按照 ...

  2. java之Map的使用

    Map的实现类有很多,其中较为常见的有HashMap,HashTable,LinkedHashMap,TreeMap,下面分别对这几个类进行简单的分析: 1.HashMap HashMap的结构数组+ ...

  3. android之Parcelable

    java编程中,为了将对象的状态保存,需要将对象序列化. 在android中,序列化有两种方法可供选择,一个是java自带的序列化方法,只需实现Serializeable接口即可:另一个是androi ...

  4. windows下使用dos命令手工与ntp服务器同步系统时间

    管理员模式的命令窗口 net stop w32time &w32tm /unregister &w32tm /register &net start w32time & ...

  5. WireShark之抓telnet密码

    背景环境: 涉及到telnet和ssh知识的时候,必须要提的是telnet传输是明文的不安全的,传输的密码都会泄露,有兴趣来做个试验. 一:工具 ·①Windows 7 PC机:②GNS3:③Wire ...

  6. 使用TK框架中 insert与insertSelective区别

    insertSelective会对字段进行判断再更新(如果为Null就忽略更新),如果你只想插入某些字段,可以用这个方法. insert对你注入的字段全部插入

  7. XAML一些控件的使用

    这节来讲一些XAML中常用控件的使用. Window Window控件是一个基础,它是其它控件的容器,我们可以通过修改其中的一些属性来设置窗体的显示效果,下面说一些最常用的属性: WindowStar ...

  8. MindSpore模型验证

    技术背景 在前面一篇博客中,我们介绍了MindSpore在机器学习过程中保存和加载模型的方法.这种将模型存储为静态文件的做法,使得我们可以更灵活的使用训练出来的模型,比如用于各种数据集的验证,或者是迁 ...

  9. 【转载】Windows 10系统默认将画面显示比例调整至125%或150%,最高分辨率已经达到3840×2160(4K)这一级别。

    高分屏打开软件界面模糊?不会设置太浪费 2017-08-31 19:37 抹又重彩 现在有好多朋友都喜欢并买了高分屏笔记本电脑.高分屏笔记本就是配有高分辨率屏幕的笔记本.为了给用户带来更好的视觉体验, ...

  10. 分布式存储ceph---ceph osd 故障硬盘更换(6)

    正常状态: 故障状态: 实施更换步骤: 1.关闭ceph集群数据迁移: osd硬盘故障,状态变为down.在经过mod osd down out interval 设定的时间间隔后,ceph将其标记为 ...