SQL Server 和数据库的 ACID 特性

6

我是一个数据库和SQL Server的新手。

因此,当我在互联网上搜索有关数据库的内容时,我发现如果数据库遵循ACID(原子性、一致性、隔离性、持久性)属性,则该数据库被认为是好的。

我想知道Microsoft SQL Server(任何版本当前或以前的版本)是否在内部遵循ACID属性,或者如果我们在应用程序中使用MS SQL Server,则我们必须编写代码以使我们的应用程序遵循ACID属性。

简而言之:维护ACID属性数据库的任务(或责任)还是应用程序员的任务。

谢谢。


事务:- 事务是一批行为像单个单位一样的SQL语句。简单来说,事务是一个单元,在其中完成整个活动的一系列工作。我们可以举银行交易的例子来理解这一点。当我们将钱从账户“A”转移到账户“B”时,就会发生一笔交易。 - Neeraj Kumar Yadav
5个回答

9

在我看来,这是一个双重维护。数据库管理员(编写存储过程)和程序员都应该执行ACID属性。SQL Server在内部维护其自己的ACID属性,我们不必担心这个。

ACID属性在SQL Server中得到执行。

阅读此文:SQL 2005的ACID属性

但这并不意味着数据库会为您处理所有事情。

根据Pinal Dave(blog.sqlauthority.com

ACID(原子性、一致性、隔离性和持久性)是数据库专业人员在评估数据库和应用程序架构时通常寻找的概念。对于可靠的数据库,应该实现这四个属性。原子性是一个全有或全无的命题。一致性保证事务永远不会以半完成的状态离开您的数据库。隔离将事务彼此分开,直到它们完成。持久性保证数据库以这样的方式跟踪未决更改,以便服务器可以从异常终止中恢复。以上四个规则对于任何处理数据库的开发人员都非常重要。这适用于处理数据库的开发人员。但是应用程序开发人员还应编写执行ACID属性的业务逻辑。我猜ACID属性的实际用途示例会更有帮助。

有没有遵循ACID属性的数据库简单CRUD操作的应用程序? - Aryan SuryaWansi
1
请查看SP内部的交易。http://www.4guysfromrolla.com/webtech/080305-1.shtml - naveen

2

不完全是:http://www.bailis.org/blog/when-is-acid-acid-rarely/;http://iggyfernandez.wordpress.com/2010/09/20/dba-101-what-does-serializable-really-mean/ - Mark Sowul
MySQL也不是(DDL肯定不是!) - Mark K Cowan

2

ACID --> 原子性(Atomicity), 一致性(Consistency Preserving), 隔离性(Isolation), 持久性(Durability)

原子性:
事务是处理的基本单位。它的所有操作要么全部执行,要么全部不执行。 例如,在Write(A)操作之后 (但在write(B)之前)系统崩溃。
数据库必须能够恢复A和B的旧值(或者完整的事务)。

一致性保持:
执行单个事务必须将数据库从一个一致状态移动到另一个一致状态。 执行事务后,A和B的总和不能改变。

隔离性:
在提交之前事务不应使其影响对其他事务产生影响。 如果两个事务同时执行,则必须表现出一个完成执行,然后另一个才开始执行。 如果在同一时间还有另一个事务正在读取(和/或写入)帐户A和B,则其不应该能够读取处于不一致状态的数据(在写入A之后和写入B之前)。

持久性:
一旦事务提交,由于未来的故障,对数据库的更改就不会丢失。 一旦事务完成,我们将始终在数据库中拥有A和B的新值。


1

事务:- 事务是一批SQL语句,行为像一个单元。简单来说,事务是一个单元,在其中执行一系列工作以完成整个活动。我们可以举银行交易的例子来理解这一点。

当我们从帐户“A”向帐户“B”转移资金时,会发生一笔交易。每个交易都具有四个特征,称为ACID属性。

◦ 原子性 ◦ 一致性 ◦ 隔离性 ◦ 持久性

原子性:- 每个事务都遵循原子性模型,这意味着如果启动了一个事务,则应将其完成或回滚。为了理解这一点,让我们以上面的示例为例,如果人们正在从帐户“A”转移金额到帐户“B”,则在完成交易后,应将其记入帐户B。如果发生任何故障,则在从帐户“A”借记金额后,更改应回滚。

一致性:- 一致性表示在完成事务后,事务期间所做的更改应保持一致。通过参考上面的示例来理解这一点,如果帐户“A”已被借记200 RS,则在完成交易后,帐户“B”应该被记为200 RS。这意味着更改应该是一致的。

隔离性: - 隔离性意味着每个事务都应该彼此隔离,两个事务之间不应有任何干扰。

持久性: - 持久性意味着一旦事务完成,所有更改应该是永久的,这意味着在任何系统故障的情况下,更改都不应丢失。


1

ACID:

[A]tomic:所有操作都作为一个单元成功或失败。

[C]onsistent:操作完成后,所有内容都处于安全状态。

[I]solated:没有其他操作会影响我的操作。

[D]urable:操作完成后,更改是安全的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接