- Atomicity原子性:这个事物,要么全做完,要么全不做
- Consistency一致性:事务执行前 与执行后 数据库系统的状态是一致的。比如转账前与转账后,两人存款的总和不变。
- Isolation隔离性:事务与事务 相互之间不影响(串行T1 T2 /T2 T1 并行 T1 T2 都不影响)
- Durability持久性:事务一旦提交,对整个数据库的影响是永久性的,(哪怕数据库恢复到某个检查点,也要保证故障点之前,已经提交的事务 生效)
其中
原子性、持久性 是由 恢复系统保证的
一致性、隔离性 是由 并发调度 保证的
write ahead logging:SQL Server中使用了WAL(Write-Ahead Logging)技术来保证事务日志的ACID特性,所有的修改 都先被写入到日志中,然后再被写入到系统状态中。
如果没有WAL:一个事务结束后,直接将改变写入磁盘,没来得及写日志,发生停电,则重启之后,系统不知道硬盘中的数据是什么状态。不知道事务是否完成。
如果使用了WAL:系统先写了日志,而没有将改动写入磁盘,发生掉电,那么在重启之后系统,可以通过比较日志和系统状态,来决定是否需要重做事务。