事务和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每天进步一点点,能多一点是一点

appdata apt-get bloomfilter channel Chatbot ChatGPT chsh ClickHouse Context css csv CUDA Cursor DaDa英语 Deepseek defer df docker elasticsearch error ffmpeg fix-missing form gif git GitLab globalproject golang HTTP HTTPS iconv IDE Interface iota Kafka LangChain libssl LLM ln mac mac系统更新 Map MCP MetaMCP mkdir MSYS2 mysql n8n nginx oh-my-zsh Ollama openconnect openssl PAM permission php pip PowerShell python rabbitmq redis reflect rsync SD sed shell Slice snowflake space SQL SSH struct syntax_err tensorflow ubuntu ue4 unauthorized unreal4 UV vim virtualbox vpn VSCode Windows x86_64 xcode-select YCM zookeeper zsh 上海积分 主从复制 事务 二进制安全 交叉熵 人力资源 代码工具 代码编辑助手 代码评审 以太坊 信息论 全民哀悼 内存管理 内容创作 分屏 分支删除 区块链 匿名函数 协作系统 协议设计 启动盘 品种 图片转视频 均线 夏天 夏季 实用技巧 密码修改 工作流 工作流触发 工具 工具管理 开发工具 开发环境 循环 微信公众号 批处理 批量处理 批量替换 批量重命名 接收器 效率工具 教程 数据分析 数据合并 数据处理 数据查询 数据类型 数据结构 数据聚合 数据转换 文件同步 文件管理 日志切分 智能体 智能合约 替代方案 本地部署 概率论 比特币 水果 治疗 流量分析 消息队列 版本控制 狗狗币 生活 用户行为 电视 症状 磁盘清理 笔记本技巧 编程语言 编译PHP 编辑器 网站统计 自动化 自动化工作流 自动提交 节点 获取方式 虚拟机 西瓜 记忆 购买指南 软连接 运维技巧 闭包 集成 雪花算法 面瘫 鞋子 项目无法编译
基本信息
  • 姓名: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