第8章 事务.ppt

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8章 事务

第八章、事务 事务概述 什么是事务 多用户并发存取同一数据可能会导致产生数据的不一致性问题。正确地使用事务可以有效控制这类问题发生的频度甚至能避免这类问题的发生。所谓事务(Transaction ),是指一个操作序列,这些操作序列要么都被执行,要么都不被执行,它是一个不可分割的工作单元。事务中任何一个语句执行时出错,系统都会返回到事务开始前的状态。事务是并发控制的基本单元,是数据库维护数据一致性的单位。在每个事务结束时,都能保持数据一致性。 例如,银行转帐工作:从一个帐号扣款并使另一个帐号增款,这两个操作要么都被执行,要么都不被执行。所以,应该把他们看成一个事务。 事务的由来 例如,企业取消了仓储部,需要将“仓储部”从department表中删除,而employee表中的部门编号与仓储部相对应的员工也应删除。 假设仓储部编号为D004,第一条DELETE语句修改department表为: DELETE FROM department WHERE department_id = D004 第二条DELETE语句修改employee表为: DELETE FROM employee WHERE department_id = D004‘ 因此,必须保证这两条DELETE语句同时执行,或都不执行。这时可以使用数据库中的事务(Transaction)技术来实现。 事务属性 由于事务作为一个逻辑工作单元,当事务执行遇到错误时,将取消事务所做的修改。一个逻辑单元必须具有4个属性: 原子性(Atomicity)、 一致性(Consistency) 隔离性(Isolation) 持久性(Durability), 这些属性称为ACID。 事务模式 SQL Server以3种事务模式管理事务。 (1) 自动提交事务模式:每条单独的语句都是一个事务。在此模式下,每条Transact-SQL语句在成功执行完成后,都被自动提交,如果遇到错误,则自动回滚该语句。该模式为系统默认的事务管理模式。 (2) 显式事务模式:该模式允许用户定义事务的启动和结束。事务以BEGIN TRANSACTION语句显式开始,以COMMIT或ROLLBACK语句显式结束。 (3) 隐性事务模式:在当前事务完成提交或回滚后,新事务自动启动。隐性事务不需要使用BEGIN TRANSACTION语句标识事务的开始,但需要以COMMIT或ROLLBACK语句来提交或回滚事务。 事务管理 1.启动和结束事务 启动事务语句的语法格式如下: BEGIN TRAN[SACTION ] [transaction_name | @tran_name_variable [ WITH MARK [ description ] ] ] 结束事务语句的语法格式如下: COMMIT [TRAN[SACTION] [transaction_name | @tran_name_variable] ] 例1 建立一个显式事务以显示Sales数据库的employee表的数据。 BEGIN TRANSACTION SELECT * FROM employee COMMIT TRANSACTION 本例创建的事务以BEGIN TRANSACTION语句开始,以COMMIT TRANSACTION语句结束。 例2 建立一个显式命名事务以删除department表的“仓储部”记录行。 DECLARE @transaction_name varchar(32) SELECT @transaction_name=tran_delete BEGIN TRANSACTION @transaction_name DELETE FROM department WHERE department_id=D004 DELETE FROM employee WHERE department_id=D004 COMMIT TRANSACTION tran_delete 例3 隐性事务处理过程。 CREATE TABLE imp_tran ( num char(2) NOT NULL, cname char(6) NOT NULL) GO SET IMPLICIT_TRANSACTIONS ON --启动隐性事务模式 GO -- 第一个事务由INSERT语句启动 INSERT INTO imp_tran VALUES (01, Zhang) INSERT INTO imp_tran VALUES (02, Wang) COMMIT TRANSACTION -

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档