SQL Server 和数据库的 ACID 属性
Posted
技术标签:
【中文标题】SQL Server 和数据库的 ACID 属性【英文标题】:SQL Server and ACID property of Database 【发布时间】:2011-10-01 19:20:29 【问题描述】:我是数据库和 SQL Server 的新手。
因此,当我在互联网上搜索有关数据库的内容时,我发现如果数据库遵守或遵循 ACID(原子性、一致性、隔离性、耐用性) 属性,则表示该数据库很好。
我想知道 Microsoft SQL Server(当前或以前的任何版本) 在内部遵循 ACID 属性,或者如果我们在应用程序中使用 MS SQL Server,那么我们必须编写这样的代码:我们的应用程序遵循 ACID 属性。
简而言之:维护ACID属性是数据库的任务(或责任) 或者它的应用程序员任务。
谢谢..
【问题讨论】:
事务:- 一个事务是一批行为类似于单个单元的 SQL 语句。简单来说,事务是完成一系列工作以完成整个活动的单元。我们可以以银行交易为例来理解这一点。当我们将资金从账户“A”转移到账户“B”时,就会发生交易。 【参考方案1】:恕我直言,这是一个双重维护。数据库管理员(编写存储过程)和程序员都应该强制执行 ACID 属性。 SQL Server 在内部维护自己的 ACID 属性,我们不必担心这一点。
ACID 属性在 SQL Server 中强制执行。
阅读:Acid Properties of SQL 2005
但这并不意味着数据库会为您处理所有事情。
根据 Pinal Dave (blog.sqlauthority.com) 的说法
ACID(原子性的首字母缩写词 一致性隔离耐久性)是一个 数据库专业人员的概念 一般在评估时寻找 数据库和应用程序 架构。对于可靠的数据库 这四个属性都应该是 达到了。
原子性是全有或全无 命题。
一致性保证一个 事务永远不会离开您的数据库 处于半成品状态。
隔离使交易保持分离 从彼此直到他们 完成了。
耐用性保证 数据库将跟踪待处理 以这样的方式改变服务器 可以从异常中恢复 终止。
以上四条规则很重要 对于任何处理的开发人员 数据库。
这适用于处理数据库的开发人员。
但应用程序开发人员还应该编写执行 ACID 属性的业务逻辑。
我猜Practical use of ACID properties 上的一个例子会帮助你更多
【讨论】:
有没有对数据库进行简单 CRUD 操作并且遵循 ACID 属性的应用程序?? 看看 SP 内部的交易。 4guysfromrolla.com/webtech/080305-1.shtml【参考方案2】:几乎每个现代数据库系统都强制执行 ACID 属性。 阅读:Database transaction and ACID properties
【讨论】:
不完全是:bailis.org/blog/when-is-acid-acid-rarely; iggyfernandez.wordpress.com/2010/09/20/… mysql 也不是(DDL 当然 不是!)【参考方案3】:ACID --> 原子性、一致性、隔离性、持久性
原子性: 事务是处理的基本单元。要么它的所有操作都被执行,要么一个都不被执行。 假设系统在 Write(A) 操作之后(但在 write(B) 之前)崩溃。 数据库必须能够恢复 A 和 B 的旧值(或完成整个事务)
保持一致性: 单独执行事务必须将数据库从一种一致状态移动到另一种一致状态。 A 和 B 的总和必须在事务执行时保持不变
隔离: 一个事务在提交之前不应该让其他事务知道它的影响。 如果两个事务同时执行,则必须看起来一个在另一个开始之前完成了执行。 如果同时执行的另一个事务正在读取(和/或写入)账户 A 和 B,它应该无法读取处于不一致状态的数据(写入 A 之后和写入 B 之前)
耐用性: 一旦事务提交,对数据库的更改就不会由于未来的故障而丢失。 一旦事务完成,我们将始终在数据库中拥有新的 A 和 B 值
【讨论】:
【参考方案4】:事务:- 事务是行为类似于单个单元的一批 SQL 语句。简单来说,事务是完成一系列工作以完成整个活动的单元。我们可以举一个银行交易的例子来理解这一点。
当我们将资金从账户“A”转移到账户“B”时,就会发生一笔交易。每笔交易都有四个特征,这些特征被称为 ACID 属性。
◦ 原子性 ◦ 一致性 ◦ 隔离 ◦ 耐用性
原子性: - 每个事务都遵循原子性模型,这意味着如果一个事务启动,它应该完成或回滚。为了理解这一点,让我们以上面的例子为例,如果有人将金额从账户“A”转移到账户“B”,则应在完成交易后将其记入账户 B。万一发生故障,从账户“A”中扣除金额后,更改应回滚。
一致性: - 一致性是指事务完成后,事务期间所做的更改应该是一致的。让我们通过参考上面的例子来理解这个事实,如果账户“A”已经被扣除了 200 RS,那么在交易完成后账户“B”应该被记入 200 RS。这意味着更改应该是一致的。
隔离:- 隔离说明每个事务都应该相互隔离,两个事务之间不应该有任何干扰。
持久性: - 持久性是指一旦事务完成,所有的更改都应该是永久的,这意味着在任何系统故障的情况下,更改不应该丢失。
【讨论】:
【参考方案5】:酸:
[A]tomic:- 一切成功或失败作为一个整体。
[C] 一致:- 操作完成后,一切都处于安全状态。
[I]solated:- 没有其他操作可以影响我的操作。
[D]urable:- 操作完成后,更改是安全的
【讨论】:
以上是关于SQL Server 和数据库的 ACID 属性的主要内容,如果未能解决你的问题,请参考以下文章