14丨什么是事务处理,如何使用COMMIT和ROLLBACK进行操作?
该思维导图由 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-1361 - 马以老师能不能穿插着一些工作环境中的实例来介绍呢?比如说事务的自动提交,生产当中我们要设置成自动提交还是不自动提交,是基于什么样的情况下才这样设计,这样就更容易理解了~,一个小建议
作者回复: 感谢Ant同学
2019-07-1217 - 半瓶醋MySQL中InnoDB是支持事务的,MyISAM不支持事务的,可以通过SHOW ENGINES命令查看~ 事务,简单来说就是:要么成功,要么失败。具体:四个特性(ACID) A:原子性,不可分割; C:一致性,无论事务是否提交成功,数据库的完整性约束不会改变,即会由原来的一致性状态变为另一种一致性状态; I:隔离性,各个事务是独立的,不会互相影响; D:持久性,一旦事务提交,对数据的修改是持久的,即使系统故障,修改依然有效。 ----分割线--- 记一下,加深印象~
作者回复: 加油 总结的不错
2019-10-2610 - 夜路破晓事务是个有理想、有个性、讲爱憎的耿直BOY。跟这样的人打交道会很放心。
作者回复: 可以这么理解,要么全部执行,要么全部不执行。不过实际操作的时候,还需要使用COMMIT和ROLLBACK来管理我们的事务
2019-07-12210 - 庞鑫华老师,什么时候能讲一下redo,undo log
作者回复: 我记得专栏后面章节里有讲到过,可以看看
2019-07-258 - 张小倔文章中提到的保存点 savepoint,实用场景有哪些呢
作者回复: 对于复杂的事务来说,可以采用savepoint,可以回滚到指定的保留点,操作起来更灵活
2019-09-046 - 毛豆为什么一直重点在讲Mysql呢,oracle只是随口一提,而且oracle是有自动提交的,例如像create语句,oracle是自动提交
作者回复: 目前是围绕一个RDBMS来做举例,顺便举例下Oracle和SQL Server的不同,这些不同我回来再做个详细的整理,放到进阶篇中
2019-07-1246 - 时间是最真的答案不知道作者在什么样的环境下操作的,我实验结果和你的不一样; 我的 MySQL8.0,使用 Navicat 12 操作的,实验结果都不一样 第一个实验,数据库中插入两条数据:关羽,张飞 第二个实验,数据库中插入两条数据:关羽,张飞 第三个实验,数据库中插入一条数据:关羽 麻烦老师回复一下
作者回复: 采用默认的autocommit=1; 第一个实验后面那个应该是ROLLBACK,和后面的实验都一样,最后一个操作应该是ROLLBACK。所以结果: 实验1:关羽 实验2:关羽,张飞 实验3:关羽
2019-07-1243 - JustDoDT看着文章听一遍,然后在读文章实践一下。然后消化消化,然后1个小时学完一篇。 我是不是很菜。
作者回复: 不会的,逐渐会有感觉,尤其是跟着代码跑一遍的时候,效果更佳
2019-07-1223 - 柔软的胖如果“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-132