- 1、本文档共23页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
其他概念-韶关学院电子邮件系统
10.1 事 务 10.2 锁 定 10.3 自动化管理 10.1.1 事务与ACID属性 用一个简单的例子来帮助理解事务:向公司添加一名新的雇员,如图10.1所示。这里的过程由3个基本步骤组成:在雇员数据库中为雇员创建一条记录;为雇员分配部门;建立雇员的工资记录。这3项任务构成了一个事务,任何一个任务的失败都会导致整个事务被撤销,而使系统返回到以前的状态。 (1)原子性。原子性意味着每个事务都必须被认为是一个不可分割的单元。假设一个事务由两个或者多个任务组成,其中的语句必须同时成功,才能认为事务是成功的。 (2)一致性。不管事务是完全成功完成还是中途失败,当事务使系统中的所有数据处于一致的状态时存在一致性。参照前面的例子,一致性是指如果从系统中删除了一个雇员,则所有和该雇员相关的数据,包括工资数据和组的成员资格也要被删除。 (3)隔离性。隔离性是指每个事务在它自己的空间发生,和其他发生在系统中的事务隔离,而且事务的结果只有在它完全被执行时才能看到。即使在这样的一个系统中同时发生了多个事务,隔离性原则也会保证某个特定事务在完全完成之前,其结果是看不见的。 (4)持久性。持久性意味着一旦事务执行成功,在系统中产生的所有变化将是永久的。即使系统崩溃,一个提交的事务仍然存在。当一个事务完成,数据库的日志已经被更新时,持久性就开始发生作用了。 ● 丢失更新(lost update):指当两个或多个事务选择同一行,然后基于最初选定的值更新该行时,由于每个事务都不知道其他事务的存在,因此最后的更新将重写由其他事务所做的更新,这将导致数据丢失。 ● 脏读(dirty read):指一个事务正在访问数据,而其他事务正在更新该数据,但尚未提交,此时就会发生脏读问题,即第一个事务所读取的数据是“脏”(不正确)数据,它可能会引起错误。 ● 不可重复读(unrepeatable read):当一个事务多次访问同一行且每次读取不同的数据时,会发生此问题。不可重复读与脏读有相似之处,因为该事务也是正在读取其他事务正在更改的数据。当一个事务访问数据时,另外的事务也访问该数据并对其进行修改,因此就发生了由于第二个事务对数据的修改而导致第一个事务两次读到的数据不一样的情况,这就是不可重复读。 ● 幻读(phantom read):当一个事务对某行执行插入或删除操作,而该行属于某个事务正在读取的行的范围时,会发生幻读问题。事务第一次读的行范围显示出其中一行已不复存在于第二次读或后续读中,因为该行已被其他事务删除。 系统提供的事务是在执行某些T-SQL语句时,一条语句就构成了一个事务,这些语句包括ALTER TABLE、CREATE、DELETE、DROP、FETCH、GRANT、INSERT、OPEN、REVOKE、SELECT、UPDATE、TRUNCATE TABLE。 例如,执行如下创建表的语句: CREATE TABLE xxx ( f1 int NOT NULL, f2 char(10) NOT NULL, f3 varchar(30)NULL ) 1.开始事务 在SQL Server中,显式地开始一个事务可以使用BEGIN TRANSACTION语句。 语法格式: BEGIN { TRAN | TRANSACTION } [ { 事务名 | @事务名变量 } [ WITH MARK [ dEscription ] ] ] 2.结束事务 COMMIT TRANSCATION语句是提交语句,它将事务开始以来所执行的所有数据都修改为数据库的永久部分,也标志一个事务的结束,其语法格式为: COMMIT { TRAN | TRANSACTION } [ 事务名 | @事务名变量 ] ] 标志一个事务的结束也可以使用COMMIT WORK语句。语法格式为: COMMIT [WORK] 3.撤销事务 若要结束一个事务,可以使用ROLLBACK TRANSACTION语句。它使得事务回滚到起点,撤销自最近一条BEGIN TRANSACTION语句以后对数据库的所有更改,同时也标志了一个事务的结束。 语法格式: ROLLBACK { TRAN | TRANSACTION } [ 事务名 | @事务名变量 ] 另外,一条ROLLBACK WORK语句也能撤销一个事务,功能与ROLLBACK TRANSACTION语句一样,但ROLLBACK TRANSACTION语句接受用户定义的事务名称。 语法格式: ROLLBACK [ WORK ] [ ; ] 4.回滚事务 ROLLBACK TRANSACTION语句除了能够撤销整个事务外,还可以使事务回滚到某个点,不过在这之前需要
文档评论(0)