MySQL 事务的简单理解

一、什么是事务。

  1. 知道事务,要先了解 mysql 的引擎,在 5.5 版本以前 mysql 的引擎默认是 MyISAM,到了 Mysql5.5 版本以后,才有了 InnoDB, 两者的区别之一就是 InnoDB 支持事务。
  2. 事务就是进行一次处理的基本单元,要么完全执行,要么都不执行。

二、事务的特性(ACID)。

  1. A,也就是原子性(Atomicity)。可以理解为组成物质的基本单位,也是我们进行数据处理操作的基本单位,必须是一个整体不可分割。
  2. C,就是一致性(Consistency)。一致性指的就是数据库在进行事务操作后,会由原来的一致状态,变成另一种一致的状态。也就是说当事务提交后,或者当事务发生回滚后,数据库的完整性约束不能被破坏。
  3. I,就是隔离性(Isolation)。它指的是每个事务都是彼此独立的,不会受到其他事务的执行影响。也就是说一个事务在提交之前,对其他事务都是不可见的。
  4. D,指的是持久性(Durability)。事务提交之后对数据的修改是持久性的,即使在系统出故障的情况下,比如系统崩溃或者存储介质发生故障,数据的修改依然是有效的。因为当事务完成,数据库的日志就会被更新,这时可以通过日志,让系统恢复到最后一次成功的更新状态。(这里就涉及到了回滚日志和重做日志的相关知识了)

三、事务的使用操作。

start transaction 或者 begin  #开启事物


savepoint #在事物中创建一个保存点,方便后面可以回滚到某个点的操作


commint #事务提交,这里提交后就相当于完成了,对数据库的改动就是永久性的了。


rollback #事务回滚,执行这个就是将此次的事务中全部的操作都恢复到事物开始前的状态


rollback to [savepoint] #将事务回滚到某个保存点


release savepoint #删除某个保存点


set transaction #设置事务的隔离级别
  1. 事务有隐式事务和显式事务两种方式,数据库默认一般都是隐式事务,mysql 默认是自动提交的。

1.1. 隐式事务,每次修改数据库后不需要手动 commit 命令,就直接修改 数据库并保存结果,比如一般的增删改操作;

1.2. 显示事务,需要在操作完最后一步,手动 commit 命令提交事务。

  1. 开启 / 关闭自动提交
set autocommit =0;  //关闭自动提交

set autocommit =1; //开启自动提交
特别的参数completion_type,设置 set @@completion_type = 1 //0 1 2
CREATE TABLE test(name varchar(255), PRIMARY KEY (name)) ENGINE=InnoDB;
SET @@completion_type = 1;
BEGIN;
INSERT INTO test SELECT '盖伦';
COMMIT;
INSERT INTO test SELECT '卢锡安';
INSERT INTO test SELECT '卢锡安';
ROLLBACK;
SELECT * FROM test;

3.1. completion = 0 默认,当我们 commit 提交数据后,在下次执行 sql 的时候还需要我们再次开启事物;

3.2. completion = 1 当我们 commit 提交数据时相当于执行的是 commit and chain,会自动打开一个链式事务,即开启同级别的一个新事务;

3.3. completion = 2 也就是当我们提交后,会自动与服务器断开连接。

总结:

数据库操作的时候,可能会失败,但正是因为有事务的存在,即使在数据库操作失败的情况下,也能保证数据的一致性。同样,多个应用程序访问数据库的时候,事务可以提供隔离,保证事务之间不被干扰。最后,事务一旦提交,结果就会是永久性的,这就意味着,即使系统崩溃了,数据库也可以对数据进行恢复。

发表评论

相关文章