事务的ACID特性 各特性由什么保证 WAL是什么

本文深入探讨了数据库事务的四大特性:原子性、一致性、隔离性和持久性,并详细解释了这些特性如何确保数据的完整性和一致性。同时,文章介绍了SQL Server中采用的WAL(Write-Ahead Logging)技术,阐述了其在保证事务日志ACID特性中的关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • Atomicity原子性:这个事物,要么全做完,要么全不做
  • Consistency一致性:事务执行前 与执行后 数据库系统的状态是一致的。比如转账前与转账后,两人存款的总和不变。
  • Isolation隔离性:事务与事务 相互之间不影响(串行T1 T2 /T2 T1 并行 T1 T2 都不影响)
  • Durability持久性:事务一旦提交,对整个数据库的影响是永久性的,(哪怕数据库恢复到某个检查点,也要保证故障点之前,已经提交的事务 生效)

 

其中

原子性、持久性  是由 恢复系统保证的

一致性、隔离性 是由 并发调度 保证的

 

write ahead logging:SQL Server中使用了WAL(Write-Ahead Logging)技术来保证事务日志的ACID特性,所有的修改 都先被写入到日志中,然后再被写入到系统状态中。

如果没有WAL:一个事务结束后,直接将改变写入磁盘,没来得及写日志,发生停电,则重启之后,系统不知道硬盘中的数据是什么状态。不知道事务是否完成。

如果使用了WAL:系统先写了日志,而没有将改动写入磁盘,发生掉电,那么在重启之后系统,可以通过比较日志和系统状态,来决定是否需要重做事务。

### ACID特性底层实现机制 #### 原子性(Atomicity) 原子性确保事务中的所有操作要么全部完成,要么完全不执行。为了实现这一目标,大多数数据库管理系统采用日志记录的方式。每次事务开始前会先写入一条BEGIN LOG ENTRY的日志条目,在每项更改发生之前也会记录下旧的数据状态以及新数据的状态。如果事务成功结束,则再追加COMMIT标志到日志文件中;反之则添加ABORT标记并回滚至最近一次成功的提交点。 ```sql -- 开始事务 START TRANSACTION; -- 更新表A的操作会被记录在重做日志里 UPDATE table_a SET column_x = value_y WHERE condition_z; ... -- 如果一切正常就提交, 否则回滚 COMMIT; -- 或者 ROLLBACK; ``` [^1] #### 一致性(Consistency) 保持系统的完整性约束条件不受破坏是实现一致性的核心目的。这意味着任何合法的事务都会使数据库从一种有效状态转换成另一种同样有效的状态。为此,DBMS会在设计阶段定义好各种规则如外键关联、唯一索引等,并且这些规则将在运行期间被严格遵循。一旦违反了预设好的约束,整个交易就会失败从而维持住整体结构上的稳定可靠。 [^2] #### 隔离性(Isolation) 隔离级别的设定决定了多个并发事务之间相互影响的程度。较低等级允许更高的性能但是可能会遇到脏读等问题;较高等级虽然能提供更强的安全保障却也带来了额外开销。具体来说: - **Read Uncommitted**: 允许读取尚未提交的数据变更; - **Read Committed**: 只能看到已经提交后的改变; - **Repeatable Read**: 不仅要看到已提交的结果而且在整个事务过程中对于同一查询返回相同集合; - **Serializable**: 完全串行化的处理方式,即不允许有任何交叉干扰存在。 通过锁定机制或MVCC (多版本并发控制),可以有效地管理资源访问权限进而达到预期效果。 [^3] #### 持久性(Durability) 持久性指的是即使系统崩溃也能保证已完成事务的效果不会丢失。主要依赖于磁盘存储技术来保存必要的元数据和实际变动内容。每当有新的改动产生时,除了更新内存缓存之外还会同步刷新到硬盘上对应的物理位置处。此外还有WAL(Write-Ahead Logging)提前把即将发生的动作序列化下来作为恢复依据之一。 ```bash # WAL模式下的SQLite配置示例 PRAGMA journal_mode=WAL; ``` [^4]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值