【数据库】一个简单的事务模型(ACID)

简介: 一个简单的事务模型(ACID)

前言



设 Ti 是从账户 A 过户 $50 到账户 B 的事务。这个事务可以定义为:


Ti: read(A);
     A := A - 50;
     write(A);
     read(B);
     B := B + 50;
     write(B);


正文


一致性(consistency):


一致性要求事务的执行不改变 A、B 之和。如果没有一致性要求,金额可能会被事务凭空创造或销毁!容易验证,如果数据库在事务执行前是一致的,那么事务执行后数据仍将保持一致。


确保单个事务的一致性是编写该事务的应用程序员的责任。完整性约束的自动检查会给这项工作带来便利。


原子性(atomicity):


假设事务 Ti 执行前账户 A 和账户 B 分别有 1000和2000。现在假设在事务 Ti 执行时系统故障,导致 Ti 的执行没有成功完成。我们进一步假设故障发生在 write(A) 操作执行之后 write(B) 操作执行之前。在这种情况下,数据库中反映出来的是账户 A 有950,而账户B有2000。这次故障导致系统丢失了 $50。特别地,我们注意到 A + B 的和不再维持原状。


这样,由于故障,系统的状态不再反映数据库本应描述的现实世界的真是状态。我们把这种状态称为不一致状态(inconsistent state)。


这样,如果一个事务或者不开始,或者保证完成,那么这样的不一致状态除了在事务执行当中意外,在其他时刻是不可见的。这就是需要原子性的原因:如果具有原子性,某个事务的所有动作要么在数据库中全部反映出来,要么全部不反映。


持久性(durability):


一旦事务成功地完成执行,并且发起事务的用户已经被告知资金转账已经发生,系统就必须保证任何系统故障都不会引起与这次转账相关的数据丢失。持久性保证一旦事务成功完成,该事务对数据库所做的所有更新就都是持久的,即使事务执行完成后出现系统故障。


隔离性(isolation):


如果几个事务并发地执行,即使每个事务都能确保一致性和原子性,他们的操作会以人们所不希望的某种方式交叉执行,这也会导致不一致的状态。


事务的隔离性确保事务并发执行后的系统状态与这些事务以某种顺序以某种次序一个接一个地执行后的状态是等价的。确保隔离性是数据库系统中称作并发控制系统的部件的责任。

目录
相关文章
|
4天前
|
SQL 数据库 数据安全/隐私保护
SQL Server数据库Owner导致事务复制log reader job无法启动的解决办法
【8月更文挑战第14天】解决SQL Server事务复制Log Reader作业因数据库所有者问题无法启动的方法:首先验证数据库所有者是否有效并具足够权限;若非,使用`ALTER AUTHORIZATION`更改为有效登录名。其次,确认Log Reader使用的登录名拥有读取事务日志所需的角色权限。还需检查复制配置是否准确无误,并验证Log Reader代理的连接信息及参数。重启SQL Server Agent服务或手动启动Log Reader作业亦可能解决问题。最后,审查SQL Server错误日志及Windows事件查看器以获取更多线索。
|
2月前
|
存储 关系型数据库 MySQL
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
|
27天前
|
存储 SQL 关系型数据库
数据库事务:确保数据完整性的关键20
【7月更文挑战第20天】事务是数据库操作的基本逻辑单位,确保数据一致性。ACID原则包括:原子性(操作全成或全败),一致性(事务前后数据合法性),隔离性(并发操作互不影响),持久性(提交后更改永久保存)。MySQL的InnoDB引擎支持事务,通过undo log实现回滚,redo log确保数据持久化。开启事务可使用`BEGIN`或`START TRANSACTION`,提交`COMMIT`,回滚`ROLLBACK`。
147 70
|
1月前
|
SQL 关系型数据库 MySQL
乐观锁在分布式数据库中与事务隔离级别结合使用
乐观锁在分布式数据库中与事务隔离级别结合使用
|
13天前
|
缓存 关系型数据库 MySQL
MySQL调优秘籍曝光!从索引到事务,全方位解锁高可用秘诀,让你的数据库性能飞起来!
【8月更文挑战第6天】MySQL是顶级关系型数据库之一,其性能直接影响应用的高可用性与用户体验。本文聚焦MySQL的高性能调优,从索引设计到事务管理,逐一解析。介绍如何构建高效索引,如联合索引`CREATE INDEX idx_order_customer ON orders(order_id, customer_id);`,以及索引覆盖查询等技术。
36 0
|
1月前
|
存储 Oracle 关系型数据库
Oracle数据库ACID特性
【7月更文挑战第6天】
43 6
|
2月前
|
关系型数据库 MySQL 数据库
MySQL数据库基础第四篇(多表查询与事务)
MySQL数据库基础第四篇(多表查询与事务)
|
2月前
|
存储 关系型数据库 MySQL
MySQL周内训参照1、ER实体关系图与数据库模型图绘制
MySQL周内训参照1、ER实体关系图与数据库模型图绘制
40 1
|
2月前
|
SQL 关系型数据库 MySQL
MySQL数据库——事务操作-begin-commit-rollback
MySQL数据库——事务操作-begin-commit-rollback
30 1