事务和ACID原则 @ 胡巴 | 星期一,十月 23 日,2017 年 | 3 分钟阅读 | 更新于 星期二,九月 28 日,2021 年

MySQL事务和事务的ACID原则简介及简单生活案例!

#【MySQL事务&事务的ACID】

什么是事务?

书面解释:事务是一组原子性的SQL查询,或者说是一个独立的工作单元。事务中的所有操作要么全部执行成功,要么全部执行失败。

生活实例:LOL买皮肤。假设你有7000点券,一款皮肤6000点券,然后你点击了购买,皮肤到了你的账号,同时你的点券被减少了6000。

这个过程中全部过程需要统一执行结果,要么执行成功,要么执行失败!试想你在买皮肤的过程中,点券减少了6000,皮肤却没有到达你的账号,那你肯定是1万个不乐意。那假如你的点券没有减少,皮肤却到了你的账号,你当然是10万个乐意了,但是腾讯肯定不乐意了!所以说为了保证双方都开心,这个过程的执行结果必须要一致才行哈!

首先你的点券要被扣除,同时皮肤到你的账号中。假如这个过程中出了任何故障,你的点券都应该还是7000,而且皮肤不应该到达你的账号中。这就是一个原子性的操作了。

那OK,皮肤购买完了,点券也扣除了!~假如过两天你登陆你的账号,突然发现皮肤没了,你前两天购买的皮肤没有了~Oh,My God~心里1W个草泥马飞奔而过,接着你就气愤的去找客服去了!这种情况就是说你的这个事务没有做到一个数据保障。有可能是腾讯的数据库宕机了,数据丢失了,这种情况是不应该出现的!~~

通过以上实例,我们似乎能感觉到一个事务好像有那么一点特点,或者说它是有一定原则的。首先,从事务的介绍中,我们可以得到一个原子性(atomicity),理解就是要么全部执行成功,要么全部执行失败,否则就可能造成实例中的那种双方不开心。接着呢?我么能明显感觉到一种特性,就是一致性(consistency),这个怎么理解呢?你看啊,你账号中有7000点券,最后变成了1款价值6000点券的皮肤加上你账号中剩余的1000点券,即7000 = 一款皮肤(6000) + 1000,也就是价值上等价了,点券没有凭空消失,皮肤也没有凭空出现。在实例的最后展现的就是一个持久性(durability)原则,也就是说你的交易完成了,这个数据就应该永远存在,按理说不应该出现实例最后那种情况。还有一种原则就隔离性(isolation),这个体会应该不是很深刻,这个特性就是说,当你在购买的过程中,这时你的点券已经被扣除,但是皮肤还没有到你的账号,假设你在另一个地点还能登陆你的账号,并查看你的点券,通常情况你应该看到的还是7000点券。就是说,这个原子性的操作没有被全部执行完成并提交,这个原子性操作的结果对你来说通常是不可见的。为什么说是通常呢?这个就需要去看一下事务的隔离级别了!~~

好,最后我们再来回顾一下事务的原则:

  • 原子性(atomicity)
  • 一致性(consistency)
  • 隔离性(isolation)
  • 持久性(durability)

这就是ACID原则了,你记住了吗?没记住的话就赶快再看一遍吧!~~

Copyright © 2017 - 2025 boboidea.com All Rights Reserved 波波创意软件工作室 版权所有 【转载请注明出处】

avatar

BoBo`s Blog每天进步一点点,能多一点是一点

基本信息
  • 姓名:bobo
  • 花名:胡巴
  • 性别:男
  • 血型:O型
  • 星座:白羊座

联系方式

  • 所在地:上海
  • QQ:279250819
  • 微信号:wanghuiwoshinideyou
  • 电子邮件:279250819@qq.com

博客地址

公众号

alt 无限递归

工作经历
  • 2022.5 - 至今

    • 公司:乐府互娱
    • 职位:高级SDK工程师
  • 2019.6 - 2022.4

    • 公司:萌推(上海突进网络科技有限公司)
    • 职位:中级PHP工程师 & 初级golang工程师
    • 荣誉:
      • 绩效A连续得主
      • 月度之星
      • 优秀个人奖
    • 所作所为:
      • 利用ES优化OMS、MMS管理系统商品列表查询
      • 利用消息队列、Redis、乐观锁优化商品审核流程
      • 利用Redis对商家端接口进行有效限流
      • 优化商品相关表索引,提升SQL查询速度
      • 商品中台构建,统一商品相关操作
      • 大表优化(数据分离、分表、大字段拆分)
      • 掌握所有商品核心流程
  • 2018.5 - 2019.5

    • 公司:DaDa英语(上海卓赞教育信息科技有限公司)
    • 职位:中级PHP开发工程师
    • 荣誉:无
    • 所作所为:
      • 利用ES优化教师CMS系统统计数据接口至500ms内
      • 工单系统开发及持续优化
      • 教师CMS系统的功能开发及持续优化
  • 2018.3 - 2018.5

    • 公司:波奇(上海)信息科技有限公司
    • 职位:初级PHP开发工程师
    • 荣誉:同下
    • 所做作为:如下
  • 2016.7 - 2018.3

    • 公司:光橙(上海)信息科技有限公司
    • 职位:初级PHP开发工程师
    • 荣誉:
      • 年度最佳进步奖
    • 所作所为:
      • 利用Redis提升商详接口最佳响应速度至50ms内
      • 利用Redis提升双11活动页可承受QPS至500以上
      • 利用Redis对接口进行简单限流
      • 与小伙伴合作提升搜索质量(ES初识)
      • 其他C端接口的开发及优化
      • B端商城老页面的维护及优化
SKILLS

编程语言

  • PHP
  • Golang
  • Shell
  • JAVA
  • JS
  • HTML\CSS

数据库

  • MySQL
  • Redis
  • Clickhouse

消息中间件

  • RabbitMq
  • Kafka

文档撰写

  • Swagger
  • Markdown

技术框架

  • Laravel
  • gin

搜索引擎

  • ElasticSearch

抓包工具

  • Charles