内容一:事务的作用
事务的作用是保护数据的安全性
内容二:MariaDB & MySQL 事务的 4 大特性
2.1 原子性(Atomicity)
一系列操作被看作一个事务,这个事务里面的所有操作要么全部失败,要么全部成功,如果在操作的过程中出现中断,则立刻进行 rollback
2.2 一致性(Consistency)
一系列操作被看作一个事务,在事务开始前和结束后,整个库的完整逻辑约束不能被打破,例如:一个人向另一个人转账,不能出现一个人转账成功另一个人没有收到转账,或者一个人转账失败另一个人收到转账的情况
2.3 隔离性(Isolation)
主要解决并发的情况,避免不同的人,在相同的时间,查看到的数据的不一致性,避免以下情况的发生:
1) 脏读:一个事务读取了另一个事务更新、提交并撤销的数据,导致此事务看到的数据是错误的
2) 不可重复读:一个事务多次读取了另一个事务多次更新并提交的数据,导致此事务看到的数据是来回变化的
3) 幻读:一个事务在批量修改所有数据,但是在修改的过程中另一个事务又往里面插入了数据,导致此事务在修改完成之后,意外发现还有一条数据没有修改
2.4 持久性(Durability)
事务结束后,所有更新都将被保存,不能回滚
内容三:MariaDB & MySQL 事务隔离级别
3.1 MariaDB & MySQL 事务隔离级别的特点
事务隔离级别 | 脏读 | 不可重复读 | 幻读 |
读未提交(read-uncommitted) | 是 | 是 | 是 |
不可重复读(read-committed) | 否 | 是 | 是 |
可重复读(repeatable-read) | 否 | 否 | 是 |
串行化(serializable) | 否 | 否 | 否 |
3.2 MariaDB & MySQL 默认的事务隔离级别
可重复读 repeatable-read
3.3 查看目前所使用的事务隔离的方法
MariaDB [(none)]> select @@tx_isolation;
+-----------------+
| @@tx_isolation |
+-----------------+
| REPEATABLE-READ |
+-----------------+
1 row in set (0.001 sec)
(补充:这里以查看 MariaDB 目前所使用的事务隔离为例)