数据库高分笔记01:事务ACID

作者:arccosxy  转载请注明出处:http://www.cnblogs.com/arccosxy/

事务就是一组原子性的SQL查询,或者说一个独立的工作单元。如果数据库引擎能够成功地对数据库应用改组查询的全部语句,name就执行该组查询。如果其中任何一条语句因为崩溃或其他原因无法执行,那么所有的语句都不会执行。也就是说,事务内的语句,要么全部执行成功,要么全部执行失败。

银行应用是解释事务必要性的一个经典例子。假设一个银行的数据库有两张表:支票(checking)表和储存(savings)表。现在要从用户Jane的支票账户转移200美元到她的储存账户,那么至少需要三个步骤:

  1. 检查支票账户的余额高于200美元;
  2. 从支票账户余额中减去200美元;
  3. 在储存账户余额中增加200美元。

上述三个步骤的操作必须打包在一个事务中,任何一个步骤失败,则必须回滚所有的步骤。事务SQL如下:

  1. START TRANSACTION;
  2. SELECT balance From checking WHERE custom_id = 10233276;
  3. UPDATE checking SET balance = balance - 200.00 WHERE custom_id = 10233276;
  4. UPDATE savings SET balance = balance + 200.00 WHERE custom_id = 10233276;
  5. COMMIT;

单纯的事务概念并不是故事的全部。ACID表示原子性(acomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)。一个运行良好的事务处理系统,必须具备这些标准特性。

  • 原子性:一个事物必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事物来说,不可能只执行其中的一个部分操作,这就是事务的原子性。
  • 一致性:数据库总是从一个一致性状态转化到另一个一致性状态。在前面的例子中,一致性确保了,即使在执行第三、第四语句之间时系统崩溃,支票账户中也不会损失200美元,因为事务最终没有提交,所以事务中所做的修改也不会保存到数据库中。
  • 隔离性:通常来说,一个事物所做的修改在最终提交以前,对其他事务是不可见的。在前面的例子中,当执行完第三条语句、第四条语句还未开始时,此时有另外一个账户汇总程序开始执行,则其看到的支票账户的余额并没有被减去200美元。事务隔离级别分为:未提交读、提交读、可重复读、可串行化。
  • 持久性:一旦事务提交,则其所作的修改就会永久保存到数据库中。此时即使系统崩溃,修改的数据也不会丢失。持久性十个有点模糊的概念,因为实际上持久性也分很多不同的级别。有些持久性策略能够提供非常强的安全保障,而有些则未必。而且不可能有能做到100%的持久性保证的策略。

事务的ACID特性可以确保银行不会弄丢你的钱。而在应用逻辑中,要实现这一点非常难,甚至可以说是不可能完成的任务。一个实现了ACID的数据库系统,相比没有实现ACID的数据库,需要做更多的额外工作,通常会需要更强的CPU处理能力、更大的内存和更多的磁盘空间。

时间: 2024-10-21 18:07:06

数据库高分笔记01:事务ACID的相关文章

数据库读书笔记(1)

一.基本概念  DBMS:Database Management System数据库管理系统,是一种操纵和管理数据库的大型软件,用于建立.使用和维护数据库. RDBMS:Relational Database Management System关系型数据库管理系统,就是在数据库管理系统的基础上增加关系,通过数据.关系和对数据的约束三者组成的数据模型来存放和管理数据. SQL:Structed Query Language结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和

再看数据库——(4)事务

什么是事务?简单的说,就是你要做的或所做的事情.用术语表述是指访问并可能更新数据库中各种数据项的一个程序执行单元. 在数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序. 举个很经典的例子:从A账户向B账户转账.这个过程需要完成两个步骤:1)从A账户中减去钱:2)在B账户中加上相应的钱数.很简单,这两个步骤缺一不可.如果一旦出错,后果不堪设想.怎么办呢?这就引出了事务的用处. sql语句如下,当不出错时,提交事务转账成功.如果出错了,就执行回滚.数据库设计也很简单,一张money表

事务ACID特性

所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位.例如,银行转帐工作:从一个帐号扣款并使另一个帐号增款,这两个操作要么都执行,要么都不执行. 数据库事务必须具备ACID特性,ACID是Atomic(原子性).Consistency(一致性).Isolation(隔离性)和Durability(持久性)的英文缩写. 原子性:指整个数据库事务是不可分割的工作单位.只有使据库中所有的操作执行成功,才算整个事务成功:事务中任何一个SQL语句执行失败,那么已经执行成

MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类

首先需要回顾一下上一篇文章中的内容:MySQL数据库学习笔记(九)----JDBC的PreparedStatement接口重构增删改查 一.JDBC事务处理: 我们已经知道,事务的概念即:所有的操作要么同时成功,要么同时失败.在MySQL中提供了Commit.Rollback命令进行事务的提交与回滚.实际上在JDBC中也存在事务处理,如果要想进行事务处理的话,则必须按照以下的步骤完成. JDBC中事务处理的步骤: 1.要取消掉JDBC的自动提交:void setAutoCommit(boolea

MYSQL数据库学习笔记1

MYSQL数据库学习笔记1 数据库概念 关系数据库 常见数据库软件 SQL SQL的概念 SQL语言分类 数据库操作 创建数据库 查看数据库的定义 删除数据库 修改数据库 创建表 数据类型 约束 修改表 表的增删查改 查询 数据库概念 数据库是一种对大量信息进行管理的一种方法. 数据库系统从结构上看,也是可以分为三层的: 物理层:数据实际如何存储 逻辑层:存储的是什么数据,以及数据间是什么关系 试图层:提供给用户的部分数据 关系数据库 目前关于数据库模型最主流的有两种, 一种叫做关系型数据库,这

数据库中并发控制与事务

数据库中并发控制和事务,经常会在面试中被问到:面试是一方面,但是数据库中这2方面的基础知识也必须要搞清楚,才能很好地指导自己平时日常工作.下面我总结下,这2天我遇到的问题,基本上是知识要点的梳理. 并发控制 基本理论和概念: 在处理并发或者写时,可以通过实现由2种类型锁组成的锁系统来解决问题:这2种类型锁通常称为共享锁和排他锁,也叫做读锁和写锁.读锁是共享的,相互不阻塞的,多个客户可以同时读取同一个资源,而互不干扰.写锁是排他的,写锁会阻塞其它的读锁和写锁. 锁的粒度分类: 分别是表锁和行锁.表

JDBC学习笔记(7)——事务的隔离级别&批量处理

数据库事务的隔离级别 对于同时运行的多个事务, 当这些事务访问数据库中相同的数据时, 如果没有采取必要的隔离机制, 就会导致各种并发问题:脏读: 对于两个事物 T1, T2, T1 读取了已经被 T2 更新但还没有被提交的字段. 之后, 若 T2 回滚, T1读取的内容就是临时且无效的.不可重复读: 对于两个事物 T1, T2, T1 读取了一个字段, 然后 T2 更新了该字段. 之后, T1再次读取同一个字段, 值就不同了.幻读: 对于两个事物 T1, T2, T1 从一个表中读取了一个字段,

学习数据库四大特性及事务隔离级别

学习数据库四大特性及事务隔离级别 一丶事务ACID四大特性 A(原子性Atomicity) : 事务是数据库的逻辑工作单位,事务里所有的操作要么全做,要么不做. C(一致性Consistency): 事务执行的结果必须使数据库从一个一致性状态变到另一个一致性状态. I(隔离性Isolation): 事务的执行不能被其他事务干扰. D(永久性Durability): 事务一旦提交,它对数据库中数据的改变就应该永久的. 二丶事务的隔离性 MySql存在4种隔离级别. 1.读未提交 Read Unco

事务ACID和5种状态

事务的ACID属性1. 原子性(Atomicity)原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生. 2. 一致性(Consistency)事务必须使数据库从一个一致性状态变换到另外一个一致性状态. 3. 隔离性(Isolation)事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰. 4. 持久性(Durability)持久性是指一个事务一旦被提交,它对数据库中数据的改变就