关于事务的特性解释

事务的特性(ACID特性)

A:原子性(Atomicity)

       事务是数据库的逻辑工作单位,事务中包括的诸操作要么全做,要么全不做。

B:一致性(Consistency)

       事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。

C:隔离性(Isolation)

      一个事务的执行不能被其他事务干扰。

D:持续性/永久性(Durability)

      一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。

解释:

  关系数据库因为商务和金融等而诞生和发展,反过来,商务和金融等也密切依赖于关系数据库的事务,以一笔付款为例,事务的原子性(Atomicity)使得付款方的账户扣减和收款方的账户增加要么都发生,要么都不发生;事务的一致性(Consistency)使得付款完成后,付款和收款两个账户的金额总和不会发生变化,钱既不会无中生有,也不会不翼而飞;隔离性(Isolation)则使得一笔付款不会破坏另一笔付款;持久性(Durability)保证了一旦付款完成,付款账户的扣减和收款账户的增加是永久的,即使在系统遇到故障的情况下也不会丢失。

摘自 淘宝阳振坤:关系数据库的变革正当其时

          淘宝海量数据库之三:事务的ACID

### 事务的 ACID 特性详解 #### 原子性 (Atomicity) 原子性是指事务是一个不可分割的工作单位,事务中的所有操作要么全部完成,要么完全不执行。如果事务的一部分失败,则整个事务都会被撤销并恢复到初始状态。这种特性通过 **Undo Log** 来实现,在每次 SQL 执行时会记录一条相反的操作日志,以便在需要回滚时能够重放这些日志以撤消已执行的部分[^3]。 #### 一致性 (Consistency) 一致性确保数据库从一个一致性的状态转换到另一个一致性的状态。这意味着事务完成后,数据库的数据必须满足所有的完整性约束条件(如外键约束、唯一性约束等)。即使发生错误或中断,数据库也始终保持其逻辑上的正确性和完整性[^2]。这一特性依赖于数据库系统的内部机制以及开发者设计的业务规则共同保障。 #### 隔离性 (Isolation) 隔离性指的是多个并发运行的事务之间互不干扰。为了支持高并发环境下的正常工作,SQL 标准定义了四种不同的隔离级别:`READ UNCOMMITTED`, `READ COMMITTED`, `REPEATABLE READ`, 和 `SERIALIZABLE`。这四类隔离级别的严格程度逐渐增加,而相应的性能开销也随之增大。实践中,`READ COMMITTED` 是最常用的选项,因为它能够在提供较高隔离度的同时保持较好的并发处理能力[^2]。 #### 持久性 (Durability) 持久性表示一旦事务成功提交,它对数据库所做的更改就会永久保存下来,即便之后系统遇到崩溃或其他异常情况也不会丢失数据。此属性通常借助 **Redo Log** 实现;当事务提交后,相关变更会被写入 Redo Log 中,并最终同步至磁盘存储中,从而保证数据不会因意外事件而消失[^1]。 ```python # 示例代码展示如何开启、提交和回滚一个简单事务 try: connection.begin() # 开启新事务 cursor.execute("UPDATE accounts SET balance = balance - 100 WHERE id = 1;") cursor.execute("UPDATE accounts SET balance = balance + 100 WHERE id = 2;") connection.commit() # 提交事务 except Exception as e: connection.rollback() # 出错则回滚事务 finally: connection.close() ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值