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

相关文章

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

MySQL数据库函数之JSON_EXTRACT示例代码

《MySQL数据库函数之JSON_EXTRACT示例代码》:本文主要介绍MySQL数据库函数之JSON_EXTRACT的相关资料,JSON_EXTRACT()函数用于从JSON文档中提取值,支持对... 目录前言基本语法路径表达式示例示例 1: 提取简单值示例 2: 提取嵌套值示例 3: 提取数组中的值注意

查询SQL Server数据库服务器IP地址的多种有效方法

《查询SQLServer数据库服务器IP地址的多种有效方法》作为数据库管理员或开发人员,了解如何查询SQLServer数据库服务器的IP地址是一项重要技能,本文将介绍几种简单而有效的方法,帮助你轻松... 目录使用T-SQL查询方法1:使用系统函数方法2:使用系统视图使用SQL Server Configu

SQL Server数据库迁移到MySQL的完整指南

《SQLServer数据库迁移到MySQL的完整指南》在企业应用开发中,数据库迁移是一个常见的需求,随着业务的发展,企业可能会从SQLServer转向MySQL,原因可能是成本、性能、跨平台兼容性等... 目录一、迁移前的准备工作1.1 确定迁移范围1.2 评估兼容性1.3 备份数据二、迁移工具的选择2.1

Python中连接不同数据库的方法总结

《Python中连接不同数据库的方法总结》在数据驱动的现代应用开发中,Python凭借其丰富的库和强大的生态系统,成为连接各种数据库的理想编程语言,下面我们就来看看如何使用Python实现连接常用的几... 目录一、连接mysql数据库二、连接PostgreSQL数据库三、连接SQLite数据库四、连接Mo

Oracle数据库如何切换登录用户(system和sys)

《Oracle数据库如何切换登录用户(system和sys)》文章介绍了如何使用SQL*Plus工具登录Oracle数据库的system用户,包括打开登录入口、输入用户名和口令、以及切换到sys用户的... 目录打开登录入口登录system用户总结打开登录入口win+R打开运行对话框,输php入:sqlp

数据库使用之union、union all、各种join的用法区别解析

《数据库使用之union、unionall、各种join的用法区别解析》:本文主要介绍SQL中的Union和UnionAll的区别,包括去重与否以及使用时的注意事项,还详细解释了Join关键字,... 目录一、Union 和Union All1、区别:2、注意点:3、具体举例二、Join关键字的区别&php

查询Oracle数据库表是否被锁的实现方式

《查询Oracle数据库表是否被锁的实现方式》本文介绍了查询Oracle数据库表是否被锁的方法,包括查询锁表的会话、人员信息,根据object_id查询表名,以及根据会话ID查询和停止本地进程,同时,... 目录查询oracle数据库表是否被锁1、查询锁表的会话、人员等信息2、根据 object_id查询被