MySQL事务主要用于处理一个包含操作量比较大、复杂的业务。比如说,删除一个学生,我们除了要删除该学生的基本信息,同时也要删除考试记录、违规记录等。诸多的操作组成一个事务。事务是用来管理insert
、update
、delete
基本指令的。当MySQL使用innodb引擎的前提下才支持事务操作。
rollback
操作,将数据恢复到执行该事务之前的状态。A去银行转账,要么转账成功、要么转账失败。
read uncommitted
)、读提交( read committed
)、可重复读( repeatable read
|默认方式 )和串行化( serializable
)。
read uncommitted
| 读未提交read committed
| 读已提交repeatable read
| 可重复读serializable
| 串行化在MySQL
数据库中,引擎默认使用repeatable read
# SELECT @@tx_isolation 或者 SELECT @@transaction_isolation
# MySQL 8.x
# transaction_isolation在MySQL 5.7.20中添加了作为别名 tx_isolation,现已弃用,并在MySQL 8.0中删除。
# 应调整应用程序transaction_isolation以优先使用 tx_isolation。
mysql> SELECT @@transaction_isolation;
+-------------------------+
| @@transaction_isolation |
+-------------------------+
| REPEATABLE-READ |
+-------------------------+
1 row in set (0.01 sec)
score
的值为80
,在事务B执行修改后读取score
的值为75
,事务B再进行回滚操作,那么事务A在两次读取的score
的值是不一致的,那么就是脏读。
事务隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
读未提交 | read uncommitted | 会 | 会 | 会 |
读已提交 | read committed | 不会 | 会 | 会 |
可重复读 | repeatable read | 不会 | 不会 | 会 |
串行化 | serializable | 不会 | 不会 | 不会 |