一、什么是事务。
- 知道事务,要先了解 mysql 的引擎,在 5.5 版本以前 mysql 的引擎默认是 MyISAM,到了 Mysql5.5 版本以后,才有了 InnoDB, 两者的区别之一就是 InnoDB 支持事务。
- 事务就是进行一次处理的基本单元,要么完全执行,要么都不执行。
二、事务的特性(ACID)。
- A,也就是原子性(Atomicity)。可以理解为组成物质的基本单位,也是我们进行数据处理操作的基本单位,必须是一个整体不可分割。
- C,就是一致性(Consistency)。一致性指的就是数据库在进行事务操作后,会由原来的一致状态,变成另一种一致的状态。也就是说当事务提交后,或者当事务发生回滚后,数据库的完整性约束不能被破坏。
- I,就是隔离性(Isolation)。它指的是每个事务都是彼此独立的,不会受到其他事务的执行影响。也就是说一个事务在提交之前,对其他事务都是不可见的。
- D,指的是持久性(Durability)。事务提交之后对数据的修改是持久性的,即使在系统出故障的情况下,比如系统崩溃或者存储介质发生故障,数据的修改依然是有效的。因为当事务完成,数据库的日志就会被更新,这时可以通过日志,让系统恢复到最后一次成功的更新状态。(这里就涉及到了回滚日志和重做日志的相关知识了)
三、事务的使用操作。
- 事务有隐式事务和显式事务两种方式,数据库默认一般都是隐式事务,mysql 默认是自动提交的。
1.1. 隐式事务,每次修改数据库后不需要手动 commit 命令,就直接修改 数据库并保存结果,比如一般的增删改操作;
1.2. 显示事务,需要在操作完最后一步,手动 commit 命令提交事务。
- 开启 / 关闭自动提交
3.1. completion = 0 默认,当我们 commit 提交数据后,在下次执行 sql 的时候还需要我们再次开启事物;
3.2. completion = 1 当我们 commit 提交数据时相当于执行的是 commit and chain,会自动打开一个链式事务,即开启同级别的一个新事务;
3.3. completion = 2 也就是当我们提交后,会自动与服务器断开连接。
总结:
数据库操作的时候,可能会失败,但正是因为有事务的存在,即使在数据库操作失败的情况下,也能保证数据的一致性。同样,多个应用程序访问数据库的时候,事务可以提供隔离,保证事务之间不被干扰。最后,事务一旦提交,结果就会是永久性的,这就意味着,即使系统崩溃了,数据库也可以对数据进行恢复。
以上就是 CRMEB 分享的所有内容,如果对你有所帮助,还清多多关注我们 CRMEB。