事务
一组操作,要么都执行要么都不执行
# 开启一个事务
START TRANSACTION;
# 多条 SQL 语句
SQL1,SQL2...
## 提交事务
COMMIT;
ACID特性 ⭐
1、原子性:事务是最小执行单位,不允许分割,要么都完成要么都不完成
2、一致性:事务执行前后数据保持一致
3、隔离性:并发访问数据库,各个并发事务之间数据库是独立的
4、持久性:实现上面三种特性后才能保证当前特性。事务提交后对数据的改变是持久的
并发事务带来的问题
简单介绍一下四个问题,以便后续了解四个事务隔离等级
1、脏读:一个事务读取并修改了数据,但是没有提交,此时的修改对其他事务是可见的,如果另一个事务带去了还未提交的数据,但第一个数据发生回滚。那么就读取到了脏数据。简单来说:事务2读取了事务1修改但未提交的数据,随后事务1回滚了数据
2、丢失修改:两个事务同时获取到一个数据后,同时又对这个数据进行了修改,那么早提交的事务的修改就丢失了。
3、不可重复读:两个事务读取到同一个数据后,事务1对其进行了修改并提交,随后事务2又读取了该数据,发现数据发生了改变
4、幻读:一个事务读取了几行数据,随后另一个事务插入了一些数据,再进行读取的时候发现多了一些不存在的记录。
并发控制
MVCC 和 锁中进行补充 :TODO
事务隔离级别 ⭐
结合并发事务带来的问题可以更好地理解这个概念
- 读取未提交:最低隔离级别,允许读取尚未提交的数据变更
- 读取已提交:允许读取并发事务已经提交的数据
- 可重复读:同一字段多次读取结果是一致的,除非本身的事务自己修改了数据。InnoDB的默认级别
- 可串行化:完