数据库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

相关文章

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

SQL Server数据库死锁处理超详细攻略

《SQLServer数据库死锁处理超详细攻略》SQLServer作为主流数据库管理系统,在高并发场景下可能面临死锁问题,影响系统性能和稳定性,这篇文章主要给大家介绍了关于SQLServer数据库死... 目录一、引言二、查询 Sqlserver 中造成死锁的 SPID三、用内置函数查询执行信息1. sp_w

Druid连接池实现自定义数据库密码加解密功能

《Druid连接池实现自定义数据库密码加解密功能》在现代应用开发中,数据安全是至关重要的,本文将介绍如何在​​Druid​​连接池中实现自定义的数据库密码加解密功能,有需要的小伙伴可以参考一下... 目录1. 环境准备2. 密码加密算法的选择3. 自定义 ​​DruidDataSource​​ 的密码解密3

Maven项目中集成数据库文档生成工具的操作步骤

《Maven项目中集成数据库文档生成工具的操作步骤》在Maven项目中,可以通过集成数据库文档生成工具来自动生成数据库文档,本文为大家整理了使用screw-maven-plugin(推荐)的完... 目录1. 添加插件配置到 pom.XML2. 配置数据库信息3. 执行生成命令4. 高级配置选项5. 注意事

MySQL 事务的概念及ACID属性和使用详解

《MySQL事务的概念及ACID属性和使用详解》MySQL通过多线程实现存储工作,因此在并发访问场景中,事务确保了数据操作的一致性和可靠性,下面通过本文给大家介绍MySQL事务的概念及ACID属性和... 目录一、什么是事务二、事务的属性及使用2.1 事务的 ACID 属性2.2 为什么存在事务2.3 事务

在Java中基于Geotools对PostGIS数据库的空间查询实践教程

《在Java中基于Geotools对PostGIS数据库的空间查询实践教程》本文将深入探讨这一实践,从连接配置到复杂空间查询操作,包括点查询、区域范围查询以及空间关系判断等,全方位展示如何在Java环... 目录前言一、相关技术背景介绍1、评价对象AOI2、数据处理流程二、对AOI空间范围查询实践1、空间查

Python+PyQt5实现MySQL数据库备份神器

《Python+PyQt5实现MySQL数据库备份神器》在数据库管理工作中,定期备份是确保数据安全的重要措施,本文将介绍如何使用Python+PyQt5开发一个高颜值,多功能的MySQL数据库备份工具... 目录概述功能特性核心功能矩阵特色功能界面展示主界面设计动态效果演示使用教程环境准备操作流程代码深度解

MySQL数据库实现批量表分区完整示例

《MySQL数据库实现批量表分区完整示例》通俗地讲表分区是将一大表,根据条件分割成若干个小表,:本文主要介绍MySQL数据库实现批量表分区的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录一、表分区条件二、常规表和分区表的区别三、表分区的创建四、将既有表转换分区表脚本五、批量转换表为分区

C#继承之里氏替换原则分析

《C#继承之里氏替换原则分析》:本文主要介绍C#继承之里氏替换原则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#里氏替换原则一.概念二.语法表现三.类型检查与转换总结C#里氏替换原则一.概念里氏替换原则是面向对象设计的基本原则之一:核心思想:所有引py

MySQL Workbench工具导出导入数据库方式

《MySQLWorkbench工具导出导入数据库方式》:本文主要介绍MySQLWorkbench工具导出导入数据库方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录mysql Workbench工具导出导入数据库第一步 www.chinasem.cn数据库导出第二步