DBMS事务的四种特性

1、原子性(Atomicity)
是指事务结束时已经全部执行完毕,不存在做一半卡在哪里。要么是在开始,要么是已经结束。例如在一个事务中定义2个update语句,不存在只执行其中一个。
2、一致性(Consistency)
可以理解为不合法的sql不会被执行。对事务来说,不合法的sql会被回滚。一致性也可以成为完整性。
3、隔离性(lsolation)
不同的事务不会互相干扰,例如一个事务在更新数据,那么此事务结束之前,其他事务是不会感受到的。
4、持久性(durability)
一个事务结束后得到的结果不会被改变,就算数据库发生故障,那么数据也有手段恢复。

事务的执行记录(执行日志)是保存到硬盘等存储介质中,可以通过日志恢复到故障发生前的记录。

### 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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值