- 1、本文档共81页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第05章节的管理事务与的管理数据库
第五章 管理事务和管理数据库 管理事务 管理数据库 事务的由来 使用DELETE 命令或UPDATE 命令对数据库进行更新时,一次只能操作一个表,这会带来数据库的数据不一致的问题。例如企业取消了后勤部,需要将后勤部从department表中删除,要修改department 表,而employee 表中的部门编号与后勤部相对应的员工也应删除。因此,两个表都需要修改,这种修改只能通过两条DELETE 语句进行。假设后勤部编号为1012 第一条DELETE 语句修改department 表 delete from department where dept_id = ’1012’ 第二条DELETE 语句修改employee 表 delete from employee where dept_id = ’1012’ 在执行第一条DELETE 语句后,数据库中的数据已处于不一致的状态。因为此时已经没有后勤部了,但employee 表中仍然保存着属于后勤部的员工记录;只有执行了第二条DELETE 语句后,数据才重新处于一致状态。但是如果执行完第一条语句后,计算机突然出现故障,无法再继续执行第二条DELETE 语句,则数据库中的数据将处于永远不一致的状态。因此必须保证这两条DELETE 语句同时执行。为解决类似的问题,数据库系统通常都引入了事务Transaction 的概念。 事务的概念及特性 事务:指作为单个逻辑工作单元执行的一系列操作,而这些逻辑工作单元需要具有原子性,一致性,隔离性和持久性四个属性,统称ACID特性。 原子性:指事务必须是原子工作单元,即对于事务所进行数据修改,要么全都执行,要么全都不执行 一致性:指事务在完成时,必须使所有的数据都保持一致性状态,而且在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构都必须是正确的。 隔离性:指由并发事务所做的修改必须与任何其他并发事务所做的修改相隔离。事务查看数据时数据所处的状态,要么是被另一并发事务修改之前的状态,要么是被另一事务修改之后的状态,即事务不会查看正在由另一个并发事务正在修改的数据。 持久性:指事务完成之后,它对于系统的影响是永久性的,即使出现系统故障也是如此。 事务的类型 隐式事务 :每次执行SQL Server的任何数据修改语句时,它都是一个隐式事务。例如:下列SQL语句是一个独立事务: Insert talbe values(1,’abc’) Update table set col1=5 where col1=1 Delete from table1 where col1=5 go 显式事务 通常在程序中用BEGIN TRANSACTION 命令来标识一个事务的开始,用COMMIT TRANSACTION 命令标识事务结束;这两个命令之间的所有语句被视为一体。只有执行到COMMIT TRANSACTION 命令时,事务中对数据库的更新操作才算确认。和BEGIN…END 命令类似。这两个命令也可以进行嵌套,即事务可以嵌套执行。 这两个命令的语法如下 BEGIN TRAN[SACTION] [transaction_name | @tran_name_variable] COMMIT [ TRAN[SACTION] [transaction_name | @tran_name_variable] ] 其中BEGIN TRANSACTION 可以缩写为BEGIN TRAN 。COMMIT TRANSACTION可以缩写为COMMIT TRAN 或COMMIT 。 transaction_name:指定事务的名称,只有前32 个字符会被系统识别。 @tran_name_variable:用变量来指定事务的名称变量。只能声明为CHAR VARCHAR NCHAR 或NVARCHAR 类型 例: 删除后勤部 declare @transaction_name varchar(32) select @transaction_name = my_transaction_delete begin transaction @transaction_name go use sample go delete from department where dept_id = ’1012’ go delete from employee where dept_id = ’1012’ go commit transaction my_transaction_delete go 事务回滚 事务回滚(Transaction Rollback) 是指当事务中的某一语句执行失败时,将对数据库的操作恢复到事务执行前或某个指定位置。 事务回
文档评论(0)