重新整理 mysql 基础篇————— mysql 事务[三]
前言
简单整理一下事务。
正文
事务有四大特性:
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.隔离性
上面我们知道单单原子性是没有实现一致性。那么隔离性就是在原子性的基础上增加一些,一些限制条件那么就可以实现一致性。
比如说,每个事务只能串行执行,这个时候也说符合的,这也是一种隔离级别。但是如果是串行,就不满足并发了,所以就有其他隔离级别了,或者说其他隔离方式。
- 持久性
一旦事务提交,则其所做的修改就会永久保存到数据库中。可能有人说这不是废话吗?事务做的修改不就是要保持带数据文件中,能够持久化吗?
这里面的持久性,表示的更多的是一种方案。持久化是有很多方式的,怎么确保你的持久化方案可行呢?比如说一个事务要修改4条语句分别在四张表,那么怎么确保这四条语句能够全部写入进去呢?会不会写到第二条的时候系统崩溃呢?
如果出现上面的问题,该怎么处理?这就是持久性的重要性了。前三个都是强调语句执行,最后一个强调存储。
结
以上只是个人整理,如有错误,望请指点。
下一节,事务的隔离。
重新整理 mysql 基础篇————— mysql 事务[三]的更多相关文章
- mysql基础篇-----mysql简介
2017-04-19 一.mysql简介 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 ...
- [MySQL实战-Mysql基础篇]-mysql架构
1.基本组成 下面是mysql的基本架构示意图 图一 图二 我们可以从图上看出,mysql大体分为两个部分,一个是server层,另一个是引擎层. server层中包含了连接器.查询缓存.分析器.优 ...
- [MySQL实战-Mysql基础篇]-mysql的日志
参考文章: https://www.cnblogs.com/f-ck-need-u/archive/2018/05/08/9010872.html https://dev.mysql.com/doc/ ...
- 重新整理 mysql 基础篇————— 介绍mysql[一]
前言 准备整理mysql的基础篇了,前面整理了sql语句序列的的<sql 语句系列(八百章)>,感觉很多用不上,就停下来了,后续还是会继续整理. mysql 基础篇主要是对一些基础进行整理 ...
- 【目录】mysql 基础篇系列
随笔分类 - mysql 基础篇系列 mysql 开发基础系列22 SQL Model(带迁移事项) 摘要: 一.概述 与其它数据库不同,mysql 可以运行不同的sql model 下, sql m ...
- (3.12)mysql基础深入——mysql日志文件/其他文件(socket/pid/表结构/Innodb)
(3.12)mysql基础深入——mysql日志文件/其他文件(socket/pid/表结构/Innodb) 关键词:mysql日志文件,mysqldumpslow分析工具 目录:日志文件的分类 1. ...
- 前端总结·基础篇·CSS(三)补充
前端总结系列 前端总结·基础篇·CSS(一)布局 前端总结·基础篇·CSS(二)视觉 前端总结·基础篇·CSS(三)补充 目录 一.移动端 1.1 视口(viewport) 1.2 媒体查询(medi ...
- 前端总结·基础篇·JS(三)arguments、callee、call、apply、bind及函数封装和构造函数
前端总结系列 前端总结·基础篇·CSS(一)布局 前端总结·基础篇·CSS(二)视觉 前端总结·基础篇·CSS(三)补充 前端总结·基础篇·JS(一)原型.原型链.构造函数和字符串(String) 前 ...
- (3.16)mysql基础深入——mysql字符集
(3.16)mysql基础深入——mysql字符集 关键字:mysql字符集,mysql编码 目录 1.概念 2.常用的字符编码 3.查看mysql字符集 [3.1]查看服务器支持的字符集 [3.2] ...
随机推荐
- 15.PHP_PHP与Ajax
PHP与Ajax 刚刚下班回来地铁上看的这一章,觉得这东西思路可以.确实解决了WEB的两个大的问题,流量和计算量问题.简单说下我的理解,然后在根据资料整理下学习笔记. 两个问题: 1.展示一个WEB网 ...
- XCTF-web_python_template_injection
web_python_template_injection 这里涉及到flask的ssti漏洞(服务端模板注入). 简单点说就是,在使用flask/jinja2的模板渲染函数render_templa ...
- CodeForces - 879
A 题意:就是一共有n个医生,每个医生上班的时间是第Si天,之后每隔d天去上班,问最少多少天能够访问完这n名医生 思路:直接进攻模拟就可以 代码: 1 #include<iostream> ...
- 项目展示$\beta$
项目 内容 课程:北航-2020-春-软件工程 博客园班级博客 要求 Beta阶段项目展示 我们在这个课程的目标是 提升团队管理及合作能力,开发一项满意的工程项目 这个作业在哪个具体方面帮助我们实现目 ...
- C# 搞桌面UI适配国产麒麟Linux+龙芯遇到的一些坑
由于一些国企有国产化的需求,所以搞了C#适配银河麒麟,适配了X64和龙芯MIPS版本 1. 在银河麒麟的龙芯版本中 pipe2 不能使用,x64版本上却可以用. pipe2 用来做自定义消息的,搞U ...
- Nacos C++客户端开发文章
前段时间关注了下阿里巴巴发起的开源项目Nacos,这是一个注册.配置中心(Naming And Config),支持各种语言的客户端,但是唯独没有C++的,考虑到以前做过一段时间的C++程序员,不禁一 ...
- Date类常用方法总结(构造|格式化输出|String转换|Long转换|计算间隔|比较)
java.util.Date类 它重写了toString方法,new一个Date类直接输出是按照这样的格式 // "EEE MMM dd HH:mm:ss zzz yyyy"Fri ...
- golang:运算符总结
算术运算符 运算符 示例 结果 + 10 + 5 15 - 10 - 5 5 * (除数不能为0) 10 * 5 50 / 10 / 5 2 % (除数不能为0) 10 % 3 1 ++ a = 0; ...
- 2019年又迎来Hi1620,鲲鹏920则是Hi1620系列的正式品牌和型号
据记者了解,2013年华为就发布了Hi1610,2014年的Hi1612是ARM64位CPU,2016年的Hi1616是首颗支持多路的ARM处理器,2019年又迎来Hi1620,鲲鹏920则是Hi16 ...
- IT菜鸟之网站搭建(emlog)
由多个网页组成的一种集合,叫做网站 网站分为:静态网站.动态网站 静态网站:不会因为时间.地点.用户角色等因素发生内容改变的网站 动态网站:会因为时间.地点.用户角色等因素发生内容改变的网站 注意: ...