前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mysql事务的前世今生-事务简介

mysql事务的前世今生-事务简介

作者头像
热心的大肚皮
发布2023-02-28 14:00:29
7800
发布2023-02-28 14:00:29
举报
文章被收录于专栏:程序猿日常笔记

大家好,我是热心的大肚皮,皮哥。

什么是事务

起源

对于程序猿来说,任务就是把现实世界的业务场景映射到数据库世界中。比如,银行为了存人们的存款建一个account表:

代码语言:javascript
复制
create table account (
  id INT NOT NULL AUTO_INCREMENT COMMENT '自增id',
  name VARCHAR(100) COMMENT '名称',
  balance INT COMMENT '余额',
  PRIMARY KEY (id)
) Engine=InnoDB CHARSET=utf8;

狗哥和猫爷是一对好朋友,狗哥有11元,猫爷只有2元,突然有一天,猫爷向狗哥借了10元,狗哥去银行输入了猫爷的账号和10元的转账金额。对于数据库来说,执行了以下两句:

代码语言:javascript
复制
update account set balance = balance -10 where name = '狗哥';
update account set balance = balance +10 where name = '猫爷';

如果执行了一条,突然断电,这应该怎么办呢?其实我们想让某些数据库操作符合现实世界中的状态转换,其中转换的规则有好几条,我们慢慢说。

  • 原子性(Atomicity)

现实生活中,转帐是一个不可分割的操作,要么做,要么全不做,这种特性就是所谓的原子性。

  • 一致性(Consistency)

我们生活的世界有各种规则,例如人民币最大面值100元,红绿灯只有3个颜色,转账一人金额变少,那么肯定有一个人金额变多等等,数据库只关注数据的状态,只要数据符合现实世界的约束或者我们的规则,我们就可以说是符合一致性的。

  • 隔离性(Isolation)

数据的两种状态转换应该是互补影响的,例如,10元钱分两次转分别是a和b,每次5元,在a操作和b操作的执行顺序有一定的规律,互相不会影响到,也就是不仅要保证这些操作以原子性方式执行,还有保证其他的状态转换不影响本次的操作。

  • 持久性(Durability)

指数据修改完成后,都应该在磁盘中保留下来,不论发生什么事故,本次操作的影响不会丢失。

需要ACID一个或者多个特性的数据库的操作就是事务。

事务的状态

分为以下几个:

活动的(active):事务对应数据库操作在执行过程中。

部分提交的(partially committed):事务的最后一个操作完成,但是都在内存中,并没有刷新到磁盘。

失败的(failed):事务处于活动或者部分提交时,遇到了停电,系统错误等。

中止(aborted):事务执行了半截而变为失败的状态。

提交的(committed):刷到磁盘。

下篇预告【mysql事务的前世今生-redo日志】

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序猿日常笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档