【数据库】一个简单的事务模型(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):


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


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

目录
相关文章
|
7月前
|
人工智能 数据挖掘 API
基于neo4j数据库和dify大模型框架的rag模型搭建——后续补充
基于neo4j数据库和dify大模型框架的rag模型搭建——后续补充
795 21
基于neo4j数据库和dify大模型框架的rag模型搭建——后续补充
|
7月前
|
Java 数据库 Docker
基于neo4j数据库和dify大模型框架的rag模型搭建
基于neo4j数据库和dify大模型框架的rag模型搭建
1858 35
|
6月前
|
中间件 关系型数据库 Go
Go语言数据库编程:数据迁移与事务控制
本文介绍了《Go语言实战指南》中关于数据库编程的核心内容,涵盖使用 GORM 进行数据迁移与事务控制。主要内容包括:AutoMigrate 方法自动创建或更新表结构;事务控制的自动与手动实现方式;事务隔离级别的设置;以及在 Gin 框架中统一管理事务的实践建议。适合开发阶段的数据库结构管理和事务性操作需求。
|
10月前
|
存储 SQL 数据库
关系数据库-数据库事务处理与ACID原则
本文详细介绍了关系数据库中的事务处理和ACID原则。通过事务处理,可以确保数据库操作的原子性、一致性、隔离性和持久性,从而提高数据的可靠性和一致性。在实际应用中,可以通过事务控制语句和适当的隔离级别,确保复杂操作的正确执行。希望本文能帮助您更好地理解和应用数据库事务处理,提高数据库系统的可靠性和性能。
401 18
|
9月前
|
SQL 数据库 索引
【YashanDB数据库】大事务回滚导致其他操作无法执行,报错YAS-02016 no free undo blocks
大事务回滚导致其他操作无法执行,报错YAS-02016 no free undo blocks
|
12月前
|
SQL 存储 Java
数据库———事务及bug的解决
事务的一些概念,并发事务以及并发事务引起的bug,脏读,不可重复读,幻读,数据库中的隔离级别,事务的简单应用
|
数据库
什么是数据库的事务隔离级别,有什么作用
【10月更文挑战第21】什么是数据库的事务隔离级别,有什么作用
198 3
|
存储 关系型数据库 数据挖掘
什么是数据库的事务隔离级别
【10月更文挑战第21】什么是数据库的事务隔离级别
360 1
|
存储 数据库 数据库管理
数据库事务安全性控制如何实现呢
【10月更文挑战第15天】数据库事务安全性控制如何实现呢