1. 事务概述
- 事务是区别文件系统的重要特征之一
- 保证数据库的完整性,要么都做,要么都不做
ACID
事务的 ACID 特性概念简单,但不是很好理解,主要是因为这几个特性不是一种平级关系:
- 只有满足一致性,事务的执行结果才是正确的。
- 在无并发的情况下,事务串行执行,隔离性一定能够满足。此时只要能满足原子性,就一定能满足一致性。
- 在并发的情况下,多个事务并行执行,事务不仅要满足原子性,还需要满足隔离性,才能满足一致性。
- 事务满足持久化是为了能应对数据库崩溃的情况。
AUTOCOMMIT
MySQL 默认采用自动提交模式。也就是说,如果不显式使用 START TRANSACTION
语句来开始一个事务,那么每个查询都会被当做一个事务自动提交
2. 隔离级别
未提交读(READ UNCOMMITTED)
- 事务中的修改,即使没有提交,对其它事务也是可见的。
提交读( READ COMMITTED) - 一个事务只能读取已经提交的事务所做的修改。换句话说,一个事务所做的修改在提交之前对其它事务是不可见的。
可重复读(REPEATABLE READ) - 保证在同一个事务中多次读取同样数据的结果是一样的。
可串行化(SERIALIZABLE) - 强制事务串行执行。
- 需要加锁实现,而其它隔离级别通常不需要