数据库ACID四原则简介

2024-04-09 03:32
文章标签 数据库 简介 原则 acid

本文主要是介绍数据库ACID四原则简介,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

数据库的ACID四原则:

事物的原子性(Atomic)、一致性(Consistent)、独立性(Isolated)及持久性(Durable)。

1.事务的原子性是指一个事务要么全部执行,要么不执行.也就是说一个事务不可能只执行了一半就停止了.比如你从取款机取钱,这个事务可以分成两个步骤:1划卡,2出钱.不可能划了卡,而钱却没出来.这两步必须同时完成.要么就不完成.

2.事务的一致性是指事务的运行并不改变数据库中数据的一致性.例如,完整性约束了a+b=10,一个事务改变了a,那么b也应该随之改变.

3.事务的独立性是指两个以上的事务不会出现交错执行的状态.因为这样可能会导致数据不一致.

4.事务的持久性是指事务运行成功以后,就系统的更新是永久的.不会无缘无故的回滚.

事务处理:

假设你想用ATM自动取款机把你储蓄存款帐户上的一笔钱转帐到你的经常帐户上去,在钱已经从存款帐户上出来正在转到经常帐户的时候,电脑突然崩溃!你的钱去哪了?不要担心,事务处理程序会使它非常安全。

仔细想想银行在幕后要做些什么工作,你一定想当然地认为银行在进行存款、提款、转帐等工作的中间什么也没干。公司、银行甚至国家每天要电子转帐几百万美圆,如果这笔资金不保险的话,那世界金融市场将会整个崩溃。

让我举一个简单的例子来说明事务处理程序的重要性。在第一国家银行中,客户可以在任何时间存款,他们也可以从他们的帐户上提款,只要所提款额小于或等于帐户中的金额。所以,拥有多个帐户的客户可以将钱款在帐户之间来回转帐。

FoxPro应用程序使用帐户类管理银行中的帐户。这个类中包含两种方式: Deposit() 和 Withdraw()。如果系统失败,这两种方式中的一种有可能会另更新数据库操作失败,比如在取款和存款结束之前电源断掉,或者帐户中没有足够的钱时,取款失败。

系统设计者要对资金在帐户见的转帐进行严格的测试。这需要往一个帐户上存款,而同时从另一个帐户取款。注意这里是同时。提款和存款不能顺序发生;他们必须同时发生,这笔转帐资金不在这个帐户或者不在那个帐户,这都是不能接受的。要么存款和提款同时成功,要么同时失败。我们该怎样做呢?

ACID测试

一笔事务其实就是数据库中收到保护的一组更新数据。所有在事务处理开始和事务结束期间的数据库改变都是受到保护的。理想情况下,事务处理程序应当能通过原子的、一致的、独立的、耐久的ACID(Atomic、 Consistent、 Isolated、 Durable)测试。理想情况下,一笔事务应当能经受住这种ACID测试。

在化学上,原子是拥有所有元素特性的最小的不可分割的单位。同样,一个原子级的事务也是最小的不可分割的单位。在转帐的例子中,一个完整的事务处理需要改变两个帐户,只改变一个帐户是不合理的。

一致性:意味着事务处理正确地转换了系统状态。要么是资金离开一个帐户进入另一个帐户,要么是都保持不变—只有这两种可能的状态。如果系统没有得到转换后状态,就回到没有转换时的状态而不会停在中间。

独立性:保证任何其他的事务都不能看到一个处在不完整状态下的事务处理。尽管实际上在钱款被提走而还没有存入另一个帐号期间有一个远远小于一秒的间隔,系统中的其他事务也不会知道的。

耐久性:表示事务处理能在系统失败时保存完好。一个事务处理应当能够承受所有的失败,包括服务器、进程、通信以及媒体失败等等。

这篇关于数据库ACID四原则简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/887067

相关文章

Mysql数据库聚簇索引与非聚簇索引举例详解

《Mysql数据库聚簇索引与非聚簇索引举例详解》在MySQL中聚簇索引和非聚簇索引是两种常见的索引结构,它们的主要区别在于数据的存储方式和索引的组织方式,:本文主要介绍Mysql数据库聚簇索引与非... 目录前言一、核心概念与本质区别二、聚簇索引(Clustered Index)1. 实现原理(以 Inno

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

Python异常处理之避免try-except滥用的3个核心原则

《Python异常处理之避免try-except滥用的3个核心原则》在Python开发中,异常处理是保证程序健壮性的关键机制,本文结合真实案例与Python核心机制,提炼出避免异常滥用的三大原则,有需... 目录一、精准打击:只捕获可预见的异常类型1.1 通用异常捕获的陷阱1.2 精准捕获的实践方案1.3

Java Docx4j类库简介及使用示例详解

《JavaDocx4j类库简介及使用示例详解》Docx4j是一个强大而灵活的Java库,非常适合需要自动化生成、处理、转换MicrosoftOffice文档的服务器端或后端应用,本文给大家介绍Jav... 目录1.简介2.安装与依赖3.基础用法示例3.1 创建一个新 DOCX 并添加内容3.2 读取一个已存

使用Node.js和PostgreSQL构建数据库应用

《使用Node.js和PostgreSQL构建数据库应用》PostgreSQL是一个功能强大的开源关系型数据库,而Node.js是构建高效网络应用的理想平台,结合这两个技术,我们可以创建出色的数据驱动... 目录初始化项目与安装依赖建立数据库连接执行CRUD操作查询数据插入数据更新数据删除数据完整示例与最佳

Oracle数据库在windows系统上重启步骤

《Oracle数据库在windows系统上重启步骤》有时候在服务中重启了oracle之后,数据库并不能正常访问,下面:本文主要介绍Oracle数据库在windows系统上重启的相关资料,文中通过代... oracle数据库在Windows上重启的方法我这里是使用oracle自带的sqlplus工具实现的方

MySQL批量替换数据库字符集的实用方法(附详细代码)

《MySQL批量替换数据库字符集的实用方法(附详细代码)》当需要修改数据库编码和字符集时,通常需要对其下属的所有表及表中所有字段进行修改,下面:本文主要介绍MySQL批量替换数据库字符集的实用方法... 目录前言为什么要批量修改字符集?整体脚本脚本逻辑解析1. 设置目标参数2. 生成修改表默认字符集的语句3

Java中最全最基础的IO流概述和简介案例分析

《Java中最全最基础的IO流概述和简介案例分析》JavaIO流用于程序与外部设备的数据交互,分为字节流(InputStream/OutputStream)和字符流(Reader/Writer),处理... 目录IO流简介IO是什么应用场景IO流的分类流的超类类型字节文件流应用简介核心API文件输出流应用文

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——