SQL 必知必会
陈旸
清华大学计算机博士
73337 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 50 讲
第一章:SQL语法基础篇 (19讲)
SQL 必知必会
15
15
1.0x
00:00/00:00
登录|注册

14丨什么是事务处理,如何使用COMMIT和ROLLBACK进行操作?

MyISAM
InnoDB
SET TRANSACTION
RELEASE SAVEPOINT
SAVEPOINT
ROLLBACK / ROLLBACK TO [SAVEPOINT]
COMMIT
START TRANSACTION / BEGIN
事务的恢复机制
数据库一致性
事务的重要性
completion_type参数
autocommit=1
autocommit=0
查看支持事务的存储引擎命令
MySQL
控制命令
隐式事务 vs 显式事务
持久性(Durability)
隔离性(Isolation)
一致性(Consistency)
原子性(Atomicity)
总结
事务操作示例
存储引擎支持事务
事务控制
事务特性
事务处理

该思维导图由 AI 生成,仅供参考

我们知道在 MySQL 5.5 版本之前,默认的存储引擎是 MyISAM,在 5.5 版本之后默认存储引擎是 InnoDB。InnoDB 和 MyISAM 区别之一就是 InnoDB 支持事务,也可以说这是 InnoDB 取代 MyISAM 的重要原因。那么什么是事务呢?事务的英文是 transaction,从英文中你也能看出来它是进行一次处理的基本单元,要么完全执行,要么都不执行。
这么讲,你可能觉得有些抽象,我换一种方式讲。
不知道你是否遇到过这样的情况,你去家门口的小卖铺买东西,已经交了钱,但是老板比较忙接了个电话,忘记你是否交过钱,然后让你重新付款,这时你还要找之前的付款记录证明你已经完成了付款。
实际上如果我们线下的交易也能支持事务(满足事务的特性),就不会出现交了钱却拿不到商品的烦恼了,同样,对于小卖铺的老板来说,也不存在给出了商品但没有收到款的风险。总之,事务保证了一次处理的完整性,也保证了数据库中的数据一致性。它是一种高级的数据处理方式,如果我们在增加、删除、修改的时候某一个环节出了错,它允许我们回滚还原。正是因为这个特点,事务非常适合应用在安全性高的场景里,比如金融行业等。
我们今天就来学习下 SQL 中的事务。今天的课程你将重点掌握以下的内容:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

MySQL中的事务处理是数据库操作的基本单元,具有ACID特性,即原子性、一致性、隔离性和持久性。本文通过生动的比喻和技术解释,深入浅出地阐述了事务的重要性和特点。文章介绍了在MySQL中使用COMMIT和ROLLBACK命令来控制事务的提交和回滚,以及这些命令可能出现成功或失败的原因。此外,还介绍了MySQL中支持事务的存储引擎以及相关的控制语句。通过本文,读者可以快速了解事务处理的基本概念和在MySQL中的实际操作,对于数据库开发和管理具有一定的参考价值。文章内容深入浅出,通过实例让读者更好地理解了事务的特性和MySQL中的事务处理方式。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《SQL 必知必会》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(68)

  • 最新
  • 精选
  • 柔软的胖
    set autocommit=0; BEGIN; INSERT INTO test1 VALUES ('a') ; BEGIN; INSERT INTO test1 VALUES ('b'); INSERT INTO test1 VALUES ('b'); 在上面代码中,第一个BEGIN没有显示提交。在执行第二个BEGIN时,自动把第一个事务提交了。请问这是MYSQL中默认的行为吗?

    作者回复: 对的,在MySQL中,如果是连续BEGIN,开启了第一个事务,还没有进行COMMIT提交,而直接进行第二个事务的BEGIN,数据库会隐式的帮助COMMIT第一个事务,然后进入到第二个事务

    2019-07-13
    61
  • 马以
    老师能不能穿插着一些工作环境中的实例来介绍呢?比如说事务的自动提交,生产当中我们要设置成自动提交还是不自动提交,是基于什么样的情况下才这样设计,这样就更容易理解了~,一个小建议

    作者回复: 感谢Ant同学

    2019-07-12
    17
  • 半瓶醋
    MySQL中InnoDB是支持事务的,MyISAM不支持事务的,可以通过SHOW ENGINES命令查看~ 事务,简单来说就是:要么成功,要么失败。具体:四个特性(ACID) A:原子性,不可分割; C:一致性,无论事务是否提交成功,数据库的完整性约束不会改变,即会由原来的一致性状态变为另一种一致性状态; I:隔离性,各个事务是独立的,不会互相影响; D:持久性,一旦事务提交,对数据的修改是持久的,即使系统故障,修改依然有效。 ----分割线--- 记一下,加深印象~

    作者回复: 加油 总结的不错

    2019-10-26
    10
  • 夜路破晓
    事务是个有理想、有个性、讲爱憎的耿直BOY。跟这样的人打交道会很放心。

    作者回复: 可以这么理解,要么全部执行,要么全部不执行。不过实际操作的时候,还需要使用COMMIT和ROLLBACK来管理我们的事务

    2019-07-12
    2
    10
  • 庞鑫华
    老师,什么时候能讲一下redo,undo log

    作者回复: 我记得专栏后面章节里有讲到过,可以看看

    2019-07-25
    8
  • 张小倔
    文章中提到的保存点 savepoint,实用场景有哪些呢

    作者回复: 对于复杂的事务来说,可以采用savepoint,可以回滚到指定的保留点,操作起来更灵活

    2019-09-04
    6
  • 毛豆
    为什么一直重点在讲Mysql呢,oracle只是随口一提,而且oracle是有自动提交的,例如像create语句,oracle是自动提交

    作者回复: 目前是围绕一个RDBMS来做举例,顺便举例下Oracle和SQL Server的不同,这些不同我回来再做个详细的整理,放到进阶篇中

    2019-07-12
    4
    6
  • 时间是最真的答案
    不知道作者在什么样的环境下操作的,我实验结果和你的不一样; 我的 MySQL8.0,使用 Navicat 12 操作的,实验结果都不一样 第一个实验,数据库中插入两条数据:关羽,张飞 第二个实验,数据库中插入两条数据:关羽,张飞 第三个实验,数据库中插入一条数据:关羽 麻烦老师回复一下

    作者回复: 采用默认的autocommit=1; 第一个实验后面那个应该是ROLLBACK,和后面的实验都一样,最后一个操作应该是ROLLBACK。所以结果: 实验1:关羽 实验2:关羽,张飞 实验3:关羽

    2019-07-12
    4
    3
  • JustDoDT
    看着文章听一遍,然后在读文章实践一下。然后消化消化,然后1个小时学完一篇。 我是不是很菜。

    作者回复: 不会的,逐渐会有感觉,尤其是跟着代码跑一遍的时候,效果更佳

    2019-07-12
    2
    3
  • 柔软的胖
    如果“INSERT INTO test SELECT '关羽';”之后没有执行COMMIT,结果应该是空。 但是我执行出来的结果是'关羽',为什么ROLLBACK没有全部回退。 代码如下 CREATE TABLE test(name varchar(255), PRIMARY KEY (name)) ENGINE=InnoDB; BEGIN; INSERT INTO test SELECT '关羽'; BEGIN; INSERT INTO test SELECT '张飞'; INSERT INTO test SELECT '张飞'; ROLLBACK; SELECT * FROM test;

    作者回复: 在MySQL中BEGIN用于开启事务,对于连续BEGIN的情况,开启了第一个事务,还没有进行COMMIT提交,而直接进行第二个事务的BEGIN,这时数据库会隐式的帮助COMMIT第一个事务,然后进入到第二个事务

    2019-07-13
    2
收起评论
显示
设置
留言
68
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部