一、事务的概述
- 事务:指的是逻辑上的一组操作,组成这组操作的各个逻辑单元,要么全部成功,要么全部失败;(例如转账操作,要满足一个出账,一个进账)
- MySQL 中的事务管理:
开启事务:start transaction
提交事务:commit
回滚事务:rollback
- 事务的特性:
原子性:事务的不可分割,组成事务的各个逻辑单元不可分割;
一致性:事务的执行前后,数据完整性保持一致;
隔离性:事务的执行不应该受到其他事务的干扰;
持久性:事务一结束,数据就持久化到数据库中;
二、事务的隔离级别
1. 如果不考虑事务的隔离性,会引发一些安全问题;
主要体现在读取数据上;比如:
- 脏读:一个事务读到了另一个事务未提交的数据,导致查询结果不一致;
- 不可重复读:一个事务读到了另一个事务已提交的 update 的数据,导致查询结果不一致;
- 虚读:一个事务读到了另一个事务已提交的 insert 的数据,导致查询结果不一致;
2. 解决安全性问题(设置事务的隔离级别)
- read uncommitted:脏读、不可重复读、虚读 都有可能会发生;
- read committed:避免脏读,不可重复读、虚读 可能发生;
- repeatable read:避免脏读、不可重复读,虚读 可能发生;
- serializable(串行化):避免脏读、不可重复读、虚读;