- 1、本文档共35页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第12章 事务和锁 数据库是可供多个用户共享的信息资源。允许多个用户同时 使用数据库的系统成为多用户数据库系统。当多个用户并发地存 取数据库时,就会产生多个事务同时存取同一数据的情况。数据 库的并发控制就是控制数据库,防止多用户并发使用数据库时造 成数据错误和程序运行错误,保证数据的完整性。 事务是多用户系统的一个数据操作基本单元。 封锁是使事务对它要操作的数据有一定的控制能力。 12.1 事务 多用户并发存取同一数据可能会引起数据的不一致性问题。正确地使用事务可以有效地控制这类问题发生的频度甚至能避免这类问题的发生。 事务(Transaction),是指一个操作序列,这些操作序列要么都被执行,要么都不被执行,它是一个不可分割的工作单元。 事务是并发控制的基本单元,是数据一致性的基本手段。 例如:A账户转账给B账户n元钱 A账户-n B账户+n 12.1.1 事务的特性及管理 1. 事务的特性 ACID: 原子性(Atomicity ) 一致性(Consistency) 隔离性(Isolation) 持久性(Durabilily) 12.1.1 事务的特性及管理 (1) 原子性 事务是一个工作单元 事务中的操作要么都做、要么都不做。 12.1.1 事务的特性及管理 (2) 一致性 事务的执行结果必须使数据库从一个一致性状态变到另一个一致性状态。 12.1.1 事务的特性及管理 (3) 隔离性 是指数据库中的一个事务的执行不能被其他事务干扰。 即多个事务同时进行,它们之间应该互不干扰 12.1.1 事务的特性及管理 (4) 持久性 持久性意味着一旦事务执行成功,在系统中产生的所有变化将是永久的。 12.1.1 事务的特性及管理 2. 事务的管理 在SQL Server 2008中,对事务的管理包含3个方面: ? 事务控制语句:控制事务执行的语句。包括将一系列操作定义为一个工作单元来处理; ? 锁机制:封锁正被一个事务修改的数据,防止其他用户访问到“不一致”数据; ? 事务日志:使事务具有可恢复性。 12.1.2 事务控制语句 隐式事务 显式事务 SQL Server 2008为每个独立的SQL语句都提供了隐含的事务控制,使得每个DML的数据操作得以完整提交或回滚。 12.1.2 事务控制语句 1. 事务控制语句 ? BEGIN TRANSACTION [tran_name]:标识一个用户定义的事务的开始。tran_name为事务的名字,标识一个事务开始。 ? COMMIT TRANSACTION [tran_name]:表示提交事务中的一切操作,结束一个用户定义的事务,使得对数据库的改变生效; ? ROLLBACK TRANSACTION [tran_name| save_name]:回退一个事务到事务的开头或一个保存点。表示要撤销该事务已做的操作,回滚到事务开始前或保存点前的状态; ? SAVE TRANSACTION save_name:在事务中设置一个保存点,名字为save_name,它可以使一个事务内的部分操作回退。 其中,TRANSACTION可简写为TRAN。 12.1.2 事务控制语句 2. 两个可用于事务管理的全局变量 @@error:给出最近一次执行的出错语句引发的错误号,@@error为0表示未出错。 (返回执行的上一个 Transact-SQL 语句的错误号。 ) @@rowcount:给出受事务中已执行语句所影响的数据行数。 12.1.2 事务控制语句 3. 事务控制语句的使用 事务控制语句的使用方法如下: BEGIN TRAN A组语句序列 SAVE TRAN save_point B组语句序列 IF @@error0 ROLLBACK TRAN save_point /* 仅回退B组语句序列 */ COMMIT TRAN /* 提交A组语句,且若未回退B组语句,则提交B组语句*/ 12.1.2 事务控制语句 【例12-1】使用事务向表Admin中插入数据。 解 USE Library GO BEGIN TRAN tran_inst INSERT INTO AdminTb(Admin ,Psw ) VALUES (WANG1,ABC) SAVE TRAN int_point INSERT INTO AdminTb(Admin ,Psw ) VALUES (WANG2,123) GO INSER
文档评论(0)