前言

简单整理一下事务。

正文

事务有四大特性:

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核心编程 第十四章 虚拟内存

    第1 4章 虚 拟 内 存 <这一章没啥,是说的几个内存相关的函数 > 14.1 系统信息 许多操作系统的值是根据主机而定的,比如页面的大小,分配粒度的大小等.这些值决不应该用硬编码的形式 ...

  2. 老板让我重构项目,我想首先应该服务治理---eureka服务治理深入浅出

    目录 什么是服务治理 Eureka调用过程 Eureka单机注册 Eureka 单机启动 单机注册 集群注册 客户调用 Eureka集群注册 idea 如何同一个项目启动多次 Eureka自我保护 为 ...

  3. MySQL锁等待与死锁问题分析

    前言: 在 MySQL 运维过程中,锁等待和死锁问题是令各位 DBA 及开发同学非常头痛的事.出现此类问题会造成业务回滚.卡顿等故障,特别是业务繁忙的系统,出现死锁问题后影响会更严重.本篇文章我们一起 ...

  4. 『动善时』JMeter基础 — 16、JMeter配置元件【HTTP信息头管理器】

    目录 1.用于演示的项目说明 2.测试计划内包含的元件 3.HTTP请求界面内容 4.查看脚本执行结果 5.添加请求头信息(HTTP信息头管理器) 6.优先级说明 7.补充:常见请求头信息 JMete ...

  5. [刷题] PTA 02-线性结构3 Reversing Linked List

    链表逆序 1 #include<iostream> 2 #include<stdio.h> 3 #include<algorithm> 4 using namesp ...

  6. [刷题] 226 Invert Binary Tree

    要求 翻转一棵二叉树 实现 翻转左右子树,交换左右子树的根节点 1 class Solution { 2 public: 3 TreeNode* invertTree(TreeNode* root) ...

  7. keepalived绑定单播地址、非抢占模式及LVS的TCP模式的高可用

    背景:keepalived默认是组播地址进行播放,且默认地址是224.0.0.18,如果配置多个keepalived主机,会导致虚拟IP地址存在冲突问题,这种问题怎么解决呢? 解决办法:就是将keep ...

  8. Ubuntu 20.04 版本安装

    Ubuntu 20.04 版本安装 安装步骤 首先创建好Ubuntu 20.04虚拟机 等待系统检查完整性 选择语言 选择不更新,回车确定 键盘语言默认即可 网卡IP配置 设置代理服务器 设置源 自定 ...

  9. VBA绘制Excel图表

    VBA调试运行进入: 几个例子: 删除工作表内所有图表 录制一个宏 简化宏再使用 大量图表可采用for循环 CSDN上用积分下载的一个例子 VBA数组 VBA调试运行进入: 右键Excel的Sheet ...

  10. Linux_搭建Samba服务(匿名访问)

    [RHEL8]-SMBserver:[RHEL7]-SMBclient !!!测试环境我们首关闭防火墙和selinux(SMBserver和SMBclient都需要) [root@localhost ...