MySQL 必知必会
朱晓峰
前摩根大通银行技术部副总裁、系统架构师
立即订阅
1138 人已学习
课程目录
已更新 14 讲 / 共 34 讲
0/4登录后,你可以任选4讲全文学习。
课前准备 (2讲)
开篇词 | 在实战中学习,是解锁MySQL技能的最佳方法
免费
环境准备 | 带你安装MySQL和图形化管理工具Workbench
实践篇 (12讲)
01 | 存储:一个完整的数据存储过程是怎样的?
02 | 字段:这么多字段类型,该怎么定义?
03 | 表:怎么创建和修改表?
04 | 增删改查:如何操作表中的数据?
05 | 主键:如何正确设置主键?
06 | 外键和连接:如何做关联查询?
07 | 条件语句:WHERE 与 HAVING有什么不同?
08 | 聚合函数:怎么高效地进行分组统计?
09 | 时间函数:时间类数据,MySQL是怎么处理的?
10 | 如何进行数学计算、字符串处理和条件判断?
11 | 索引:如何提高查询的速度?
12 | 事务:怎么确保关联操作正确执行?
MySQL 必知必会
15
15
1.0x
00:00/00:00
登录|注册

12 | 事务:怎么确保关联操作正确执行?

朱晓峰 2021-04-03
你好,我是朱晓峰。
我们经常会遇到这样的场景:几个相互关联的数据操作,必须是全部执行,或者全部不执行,不可以出现部分执行的情况。比如说,你从微信账号里提现 100 元到银行卡上,这个动作就包括了相互关联的 2 个步骤,首先是微信账号减 100 元,然后是银行卡账号加 100 元(这里假设没有手续费)。假如因为某种异常,这 2 个操作只执行了一个,另外一个没有执行,就会出现你的钱少了 100 元,或者你的钱多了 100 元的情况,这肯定是不能接受的。
如何才能确保多个关联操作全部执行呢?这时就要用到事务了。接下来我就重点讲一讲什么是事务,以及如何正确使用事务。

什么是事务?

事务是 MySQL 的一项功能,它可以使一组数据操作(也叫 DML 操作,是英文 Data Manipulation Language 的缩写,包括 SELECT、INSERT、UPDATE 和 DELETE),要么全部执行,要么全部不执行,不会因为某种异常情况(比如硬件故障、停电、网络中断等)出现只执行一部分操作的情况。
事务的语法结构如下所示:
START TRANSACTION 或者 BEGIN (开始事务)
一组DML语句
COMMIT(提交事务)
ROLLBACK(事务回滚)
我解释一下这几个关键字。
START TRANSACTION 和 BEGIN:表示开始事务,意思是通知 MySQL,后面的 DML 操作都是当前事务的一部分。
COMMIT:表示提交事务,意思是执行当前事务的全部操作,让数据更改永久有效。
ROLLBACK:表示回滚当前事务的操作,取消对数据的更改。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《MySQL 必知必会》,如需阅读全部文章,
请订阅文章所属专栏
立即订阅
登录 后留言

精选留言(5)

  • Harry

    学了这节课,还真不敢说自己知道什么是事务!
    2021-04-04
    1
  • molingwen
    是否能提供一下这个测试数据库,非常感谢
    2021-04-05
  • 洛奇
    文中,张三和张三爱人消费会员卡购物的例子里,正确的事务隔离级别应该是SERIALIZABLE吗?其他的三个隔离级别,我认为都存在发生错误的可能性。比如,默认的可重复读的隔离级别下,两个事务一起并行执行时,都只会取到100元,两个事务提交后,会员卡余额变成0,但消费了两次!
    2021-04-05
  • Harry

    学习了要监控事务中失败的 SQL 操作并对其进行回滚处理。

    但对于如何用好事务的隔离性,心里没底。主要是不知道如何使用锁来操作不同的隔离等级。
    2021-04-04
  • lesserror
    每一讲都有收获。

    课后思考题的答案已经在总结的第一段话中给出了。

    关于MVCC和锁是面试的常见问题。本专栏侧重入门。这部分内容看《MySQL实战45讲》和书籍《MySQL是怎样运行的》。

    以上资料都认真看了,基本应对数据库的问题可以做到胸有成竹了!
    2021-04-03
收起评论
5
返回
顶部