我们都知道,计算机处理的速度非常地快,但是再快的计算机,也面临着这样的问题,同一个时间里面有着非常多的请求都要对统一资源发生操作。所以,在数据库中,引入事务来解决这样的问题。

我们举个简单的例子,我在街上买了2排益力多,要支付宝转25元给商家,这个时候会这样操作,支付宝先检查我的余额是否还有25元,然后从我的余额中扣取25元,然后商家的支付宝增加25元。假如我的支付宝刚好只有25元,在转给商家的瞬间,我用另外一个手机,在拼多多上面买了一个20元的西瓜,也用支付宝支付,因为有了数据库事务,这两个操作并不会同时成功。

Mysql的数据库有着4大特性,我们称之为ACID。即原子性,一致性,隔离性,与持久性。

原子性(atomicity)一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作,这就是事务的原子性。在上述例子中,要么我扣了25元,益力多的商家多了25元,要么我不扣钱,商家也不多钱。不会存在扣了我的钱,商家又没收到钱的情况。那估计每天都是各种投诉跟纠纷。

一致性(consistency)数据库总是从一个一致性的状态转换到另一个一致性的状态。(在前面的例子中,一致性确保了,这25元要么在我这还没给商家,要么已经到达商家账户了,不会存在这25元凭空消失的情况。)

隔离性(isolation)通常来说,一个事务所做的修改在最终提交以前,对其他事务是不可见的。(在前面的例子中,当我还在支付给小卖部卖家25元的时候,对于我另外一个在拼多多上付款的事务,是觉得我还有25元的,只有当我整个事务提交后,另外一个事务才知道我已经扣除了对应的数额。所以,我们在执行扣除的时候,同时也要判断余额是否足够。)

持久性(durability)一旦事务提交,则其所做的修改将永久保存到数据库。(此时即使系统崩溃,修改的数据也不会丢失。)

实时上,如果数据库要严格遵循这这个性质,势必会造成数据库的性能降低。所以,在InnoDB中,是有着多种不同的事务级别的。分别是读未提交,读已提交,可重复读,,与串行化四种突通的级别。

读未提交:别人改数据的事务尚未提交,我在我的事务中也能读到。上述例子,假如拼多多的扣款是发生在我的金额已经减少25之后,但是事务还没提交,这个时候读取数据库,就已经读到数据是0了。很显然,如果这个时候,前面的时候回滚了,那么这个读取到的结果称之为脏读。

读已提交:别人改数据的事务已经提交,我在我的事务中才能读到。在上述例子中,如果扣减25的事务未完成,那么读到的都是结果25。假如在后面的事务中,多次读取余额,那么就有可能读到25,可能读到0,我们称之为不可重复读。

可重复读:别人改数据的事务已经提交,我在我的事务中也不去读。这种在第一次读数据的时候,实际上就已经形成对应的视图,后面只能读到对应的数据。

串行:我的事务尚未提交,别人就别想改数据。这个是严格串行化,在上述例子中,只有前面的扣除25元完成后,才能开始后面的事务。

这4种隔离级别,并行性能依次降低,安全性依次提高。好了,今天我们简单介绍了mysql的事务,不知道对你是否有所启发,欢迎大家关注我,共同学习,共同进步。

严格来说,数据库是长期储存在计算机内、有组织的、可共享的数据集合。数据库中的数据指的是以一定的数据模型组织、描述和储存在一起、具有尽可能小的冗余度、较高的数据独立性和易扩展性的特点并可在一定范围内为多个用户共享。

mysql数据结构丢失_数据库谈一谈MySQL中的事务相关推荐

  1. mysql 浮点数 字节_数据库学习笔记之MySQL(02)

    目录 01. 数据表的组成 02. 数据表创建的前提 03. 数据表的创建语法规范 04. MySQL中的数据类型 05. 数值型包含哪些 06. 字符串类型 07. 日期时间类型 正文 01. 数据 ...

  2. mongoDB存视频和mysql存视频_数据库存储方式:MySQL存储、MONGODB存储、Redis存储、json存储、视频存储、图片存储...

    1.mongo存储 导包 开始mongo数据库 import pymongo 链接 db = pymongo.MongoClient()['zhe']['lll'] dicts={ 'name':(变 ...

  3. MySQL自带的数据库界面化工具MySQL Workbench的安装

    活动地址:CSDN21天学习挑战赛   目录 MySQL自带的数据库界面化工具MySQL Workbench的安装 安装MySQL Workbench ​找到mysql安装包 在选择产品页面选择MyS ...

  4. 数据库mysql的索引_数据库索引

    数据库索引 编辑 锁定 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息.如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信 ...

  5. mysql savepoint 丢失_关于MySQL中savepoint语句使用时所出现的错误

    前几天帮同事解决一个案例,在主从复制环境下,从库上的MySQL版本号是5.5.5,遇到下面的错误: #其他非相关信息我都隐藏掉了 [(yejr@imysql.com)]> show slave ...

  6. 管理mysql表知识点_数据库复习提纲(必考知识点整理)

    第1章 绪论 1 数据:数据是数据库中存储的基本对象. 数据库(DB):是长期存储在计算机内.有组织的.可共享的大量数据的集合. 数据库管理系统(DBMS):提供数据定义语言(DDL),用户通过它可以 ...

  7. mysql删除员工_数据库删除职工信息

    <数据库技术原理与应用教程第2版>--1.4数据管理 本节书摘来自华章出版社<数据库技术原理与应用教程第2版>一书中的第1章,第1.4节,作者 徐洁磐 操凤萍 ,更多章节内容可 ...

  8. mysql数据漂移_数据库漂移-和数据库漂移相关的内容-阿里云开发者社区

    MySQL双主一致性架构优化 | 架构师之路 一.双主保证高可用 MySQL数据库集群常使用一主多从,主从同步,读写分离的方式来扩充数据库的读性能,保证读库的高可用,但此时写库仍然是单点. 在一个My ...

  9. mysql表结构设计_数据库表结构设计

    1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关系:即一张原始单据对 应且只对应一个实体.在特殊情况下,它们可能是一对多或多对一的关系,即一张原始单证 ...

最新文章

  1. 解决jupyter中无自己创建的虚拟环境
  2. SWFUpload上传
  3. html正则表达式search,正则表达式解析关键字和标签的搜索字段([])
  4. android鸿洋布局,Android基础ConstrainLayout约束布局的介绍和使用
  5. 3月12日见!红魔5G游戏手机正式官宣:全球首款144Hz游戏手机
  6. 原理图转换为电路图时管脚不匹配的可能情况
  7. 卡通动漫漫画微信小程序源码开源版
  8. RecyclerView的横向展示、item滑动居中
  9. php股票t 0,股票T+0是什么意思?如何看懂股票T+0?
  10. ubuntu 限速 流量监控工具 - iftop
  11. jar文件打不开解决办法
  12. 力软敏捷开发框架源码7.0.6旗舰版 JNPF开发平台3.3.3企业版 旗舰版
  13. Basler相机外部触发硬件设置
  14. 【100个高大尚求职简历】简历模板+修改教程+行业分类简历模板 (涵盖各种行业) (简历模板+编辑指导+修改教程)
  15. postrgresql常用语句
  16. Java设计模式9,模板方法模式
  17. linux进程占用的资源,Linux查看进程的资源占用情况
  18. 【cocos2dx游戏】 大鱼吃小鱼游戏源代码网盘下载
  19. 我的INTERNET网络收藏夹网址
  20. vfp如何使用spt

热门文章

  1. python人民币小写转大写_人民币金额转中文大写 (python实现)
  2. 负和、零和与正和(博弈论的诡计)
  3. 四川传媒学院加入ACA世界大赛!发展博学笃行,德艺双馨人才
  4. Directx11教程三十之ProjectiveTexturing(投影纹理)
  5. 概率统计与机器学习:期望,方差,数学期望,样本均值,样本方差之间的区别
  6. 小说形象特征包括哪些方面_小说形象特征包括哪些方面
  7. L1-085 试试手气(15分)(C语言)
  8. 基于activemq的分布式事务解决方案
  9. 创业者如何向投资人要资源 ?
  10. 复工之后:员工如何改善网络安全?