数据库事务及并发控制

一、引言



一项事务(Database Transaction) 相比于数据库,是指作为数据库系统中单个逻辑工作单元执行的一系列操作。事务之间相互独立。事务在数据库系统中主要用于:

1.提供可靠的逻辑工作单元保证数据库的可恢复性(原子性),及数据库的一致性。

2.保证并发程序间访问数据库具有隔离性。

由定义:一项数据库事务必须具有:原子性(atomic),一致性(consistent),隔离型(isolated)及持久性(durable)。DBA经常将其简称为ACID.

原子性保证数据库或其他数据存储事务执行具有“all-or-nothing”性质即要么完整的执行要么不执行。隔离性保证不同事务间的执行互不相干。一致性保证结果符合数据库存储约束条件:Unique,reference(外键),primary key(主键)。持久性保证数据存储的持久性。

二、数据库约束条件



1.主键(primary key):标识数据元组的键,必须满足值不为null,一张表中有且只有一个主键。

2.特殊键(unique key):指对数据库元组中0~n(n<元组属性个数)个属性设置后保证该属性值在数据库表中唯一。在数据库索引中默认为唯一索引(unique index)。值可以为null

3.外键(reference key):用于标识被引用表(父表)中的唯一元组。值为空或者为被引用表(父表)的候选键(多为主键).

plus:特殊键集合是数据元组的候选键,从候选键中挑选其一作为数据元组主键。来自不同表之间的元组用外键进行索引。

键名 释义
Simple(简单键) 由元组中一个属性组成的键。例:(simple key)
Concatenated(串联键) 由元组中至少两个属性(Simple键)串连而成的单个键。例:(simple key_simple key)
Compound(混合键) 由元组中至少两个属性(Simple键)混合成的键。例:(simple key,simple key)
Composite(组合键) 由元组中至少1个混合键并至少一个Simple键组合而成的键。例:((simple key,simple key),simple key)
Natural(自然键) 不利用本数据库中元组属性来生成键,直接由外部来定义生成。
Surrogate(代理键) 由数据库系统生成的键或当生成时取决部分候选键的生成。多为数字ID,主要用于提高运行效率。
Candidate(候选键) 候选键
Primary(主键) 在系统实现中多用该键来查询数据表及不同表之间进行连接
Alternate(可选键) 除主键外可以用来标识元组的键。为单张表中除主键外可利用来查询元组的键。
Foreign(外键) 本张表中引用的同一数据库里的另一张表里的特殊键(它们的值相同)。

三、事务型数据库

事务型数据库指数据库管理系统,当在数据库中写入事务在执行未完成时支持回滚。现今的大多数关系型数据库管理系统都支持事务。

在数据库系统中,一项事务可以包含多条数据操作(读,写)。使用数据库系统的用户以保证数据的一致性和完整性作为数据库的衡量指标。数据库事务执行(SQL)的通用范式为:

1.执行事务(Begin the transaction)。

2.执行属于事务的一系列数据操作(读写)。

3.如果事务执行过程未遇到错误则提交并正常终止事务。

4.如果遇到错误则回滚事务并终止事务。

实现上,多用户的数据库存储和处理事务,经常通过为每项事务分配一个ID.

其他实现方式:

嵌套事务:在一个已有事务范围内嵌套的事务。可以有不同的实现方式,但他们有共同点即在最外层事务未结束之前不相关事务间的隔离性,这意味着嵌套事务不一定是必须要持久化更新数据到数据库中。

四、并发控制

广义的并发控制用于提供规则(rules),设计理论和方法来保证不同组建交互时并发操作的数据一致性(consistency)和正确性(correctness),乃至保证整个系统的一致性和正确性。在系统中引入并发控制会降低整个系统的运行效率,所以设计并发控制时在保证操作的一致性和正确性的同时,尽量提高程序的运行效率。

并发控制在数据库管理系统中保证事务的运行不会破坏数据的完整性约束。理论;序列化理论(serializability theory)及原子性事务(atomic transction 1993)。在数据库实现中多运用序列化理论。为了保证数据的正确性,DBMS保证只有序列化的事务才会被执行。

1.为什么需要并发控制?

如果事务的执行是序列化的即顺序的执行没有时间上的叠加,那么就不存在事务的并发。然而,为了提高系统的运行效率,允许对数据库交叉读写的并发操作,这导致读写操作的不可控同时一些未期望的结果的发生。比如:

i.丢失更新问题:时间序列上,第二个写数据事务在第一个写数据事务后执行。例:假如3个事务(t1,t2,t3)并发,两个写,一个读。顺序执行情况下为(t1写,t2读,t3写),由于并发情况无法保证事务在时间上的顺序,出现了(t1写,t3写,t2读)的情况。多出现在数据库数据更新的情况下。

ii,读脏数据问题:时间序列上,第二个读操作在第一个删除操作前执行。例:加入2个事务(t1,t2)并发,一个删除,一个读。顺序执行情况下为(t1删除,t2读),并发情况下:(t2读,t1删除)

iii,不正确的总结问题:两个事务并发,一个事务用于总结数据库有多少相同属性值的元组,另一个事务写数据,写的操作可以在总结完前写入,也可能在总结后写入。这导致总结的数据是一个随机值。

2.并发控制机制

乐观锁:在事务执行完后再对事务并发的隔离性和完整性进行检验,如果不满足事务的约束条件则,则挑选出之前已被遗弃某些事务重新再执行。应用场合:重复执行的事务量比较小。

悲观锁:如果一项事务的执行不满足并发控制的条件(隔离型和完整性约束),则对其进行加锁直到该事务满足并发控制条件时才释放锁。

半乐观锁:对并发控制的一部分条件加悲观锁,另一部分条件加乐观锁。

当两个事务之间相互加锁(相互之间,一个对另一个加锁)容易引发死锁。死锁问题的解决多为开一个驻留事务解除死锁,并迅速重新开启,重新执行。

2.1 锁(如:两阶段锁-Two Phase Locking 2PL)对控制写的事务的对数据进行加锁;对一个事务加锁的另一事务也可能被加锁。

2.2序列化图检查。检测事务调用图是否构成环,若构成通过放弃某些事务来解除死循环造成的死锁。

2.3 根据时间戳进行排序。给事务分配时间戳,并对数据并发的事务按时间戳来进行排序分配资源。

2.5 根据提交顺序。

2.6 多版本并发控制。

五、参考:



http://en.wikipedia.org/w/index.php?title=Database_transaction&oldid=521605403

http://en.wikipedia.org/wiki/Unique_key

http://en.wikipedia.org/wiki/Foreign_key

http://en.wikipedia.org/wiki/Nested_transaction

http://en.wikipedia.org/wiki/Concurrency_control

时间: 2024-10-11 22:42:33

数据库事务及并发控制的相关文章

数据库事务的四大特性和事务隔离级别

Reference: [1] http://www.cnblogs.com/fjdingsd/p/5273008.html [2] http://blog.csdn.net/fg2006/article/details/6937413 数据库事务四大特性 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全

数据库-事务和锁

事务 所谓事务是用户定义的一个数据库操作系列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位.例如在关系数据库中,一个事务可以是一条sql语句.一组sql语句或整个程序. 给个栗子: 小IT在网上购物,其付款过程至少包括以下几步数据库操作: 更新客户所购商品的库存信息: 生成订单并且保存到数据库: 更新用户相关信息,例如购物数量等: 正常情况下,操作顺利进行,最终交易成功,那么与交易相关的所有数据库信息也成功更新.但是,如果在这一系列过程中任何一个环节出了差错,例如在更新商品库存

[数据库事务与锁]详解三: 深入分析事务的隔离级别

注明: 本文转载自http://www.hollischuang.com/archives/943 本文详细介绍四种事务隔离级别,并通过举例的方式说明不同的级别能解决什么样的读现象.并且介绍了在关系型数据库中不同的隔离级别的实现原理. 在DBMS中,事务保证了一个操作序列可以全部都执行或者全部都不执行(原子性),从一个状态转变到另外一个状态(一致性).由于事务满足久性.所以一旦事务被提交之后,数据就能够被持久化下来,又因为事务是满足隔离性的,所以,当多个事务同时处理同一个数据的时候,多个事务直接

SQL_事务的并发控制

--多个用户对同一个数据操作时,一个用户的行为结果可能导致另一个用户使用的数据无效,通过事务的并发控制可以确保 --同时发生的行为与数据的有效性不发生冲突 begin transaction select * from teachers with(holdlock) --数据库加锁 waitfor delay '00:00:10' commit transaction --通过commit 或者rollback可以解锁 begin transaction update teachers set

网上资料笔记总结!!数据库事务并发问题,锁机制和对应的4种隔离级别

数据库事务并发问题 数据库的操作通常为写和读,就是所说的CRUD:增加(Create).读取(Read).更新(Update)和删除(Delete).事务就是一件完整要做的事情.事务是恢复和并发控制的基本单位.事务必须始终保持系统处于一致的状态,不管在任何给定的时间并发事务有多少.事务在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序.是数据库中各种数据项的一个程序执行单元.事务是用户定义的一个操作序列(多个表同时读写).这些操作要么都做,要么都不做,是一个不可分割的工作单位

数据库 事务的特性ACID

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

数据库:自己理解的“数据库事务隔离级别”

转载请注明出处: jiq?钦's technical Blog - 季义钦 引言:在网上搜了很多关于事务的文章,感觉单独来看都很难看懂,所以综合自己的理解写一篇我自己能理解的关于关系型数据库事务的文章. 一.事务特征 我们都知道数据库事务具备ACID特性: Atomic(原子性):一个事务要么成功,要么失败 Consistency(一致性):一致性代表了底层数据存储的完整性.事务执行前后数据库都必须处于一个合法的状态.什么才是一个合法的状态? 比如满足数据库的唯一性约束.数据类型验证.引用完整性

数据库事务与隔离等级

事务(transaction)是数据库管理系统的执行单位,可以是一个数据库操作(如Select操作)或者是一组操作序列.事务ACID属性,即原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durability). 原子性:保证事务中的所有操作全部执行或全部不执行.例如执行转账事务,要么转账成功,要么失败.成功,则金额从转出帐户转入到目的帐户,并且两个帐户金额将发生相应的变化:失败,则两个账户的金额都不变.不会出现转出帐户扣了钱,而目的帐户没有

数据库事务的四大特性和隔离级别

数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么全部执行,要么全部都不执行. 一个逻辑工作单元要成为事务,必须满足事务的四大特性(ACID).即原子性(Atomic).一致性(Consistent).隔离性(Insulation)和持久性(Duraction). 原子性(Atomic):事务是一个完整的操作,事务的各个操作步骤是不可分的.即要么都执行,要么都不执行. 一致性(Consistent):事务执行的结果必须使数据库从一个一致性状态