资源描述:
《SQL第11章事务》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第11章事务11.1事务的概述11.2事务的管理与应用111.1事务的概述1)事务的概念事务是最小的工作单元。这个工作单元要么成功完成所有操作,要么就是失败,并将所做的一切复原。2)事务特性原子性(Atomic)一致性(ConDemoltent)独立性(Isolated)持久性(Durable)211.1事务的概述3)事务的运行模式显式事务:显示事务是手工配置的事务。用保留字标识显式事务的开始和结束。开始显式事务,使用BEGINTRAN。结束显示事务,使用COMMITTRAN。取消事务,使用ROLLBACKTRAN命令
2、。隐式事务:在前一个事务完成时新事务隐式启动,但每个事务仍以COMMIT或ROLLBACK语句显示完成。311.1事务的概述自动提交事务每条单独的SQL语句都是一个事务,这是SQL默认的事务管理模式,每个T-SQL语句完成时,都被(成功)提交或(失败)回滚。批处理级事务只能应用于多个活动结果集(MARS),在MARS会话中启动的T-SQL显示或隐式事务变为批处理集事务。当批处理完成时没有提交或回滚的批处理级事务将自动由SQLSERVER进行回滚。4第11章事务11.1事务的概述11.2事务的管理与应用511.2事务的管
3、理与应用1、BEGINTRAN语句使用BEGINTRAN语句主要是显示地命令SQLSERVER开始一个新事务,如果遇上错误,在BEGINTRAN之后的所有数据改动都能进行回滚,以将数据返回到已知的一致状态。该语句主要用于显示事务中。其语法结构如下:BEGIN{TRAN
4、TRANSACTION}[{transaction_name
5、@tran_name_variable}[WITHMARK[‘description’]]]611.2事务的管理与应用1、BEGINTRAN语句参数说明:TRANSACTION可简写为TRAN
6、transaction_name为事务的名称,其命名必须符合标识符规则,也可以省略不写。@tran_name_variable指用户定义的含有有效事务名称的变量名称。WITHMARK[‘description’]用于指定在日志中标记事务711.2事务的管理与应用2、COMMITTRAN语句COMMITTRAN语句用于提交事务的操作结果,如果执行事务直到它无误地完成,则可以使用该语句对数据库做永久的改动。其语句格式为:COMMIT{TRAN
7、TRANSACTION}[{transaction_name
8、@tran_nam
9、e_variable}]811.2事务的管理与应用3、ROLLBACKTRAN语句ROLLBACKTRAN语句用于当事务中的T-SQL语句发生错误时进行回滚操作,从而恢复数据库至事务开始之前的状态。其语法格式为:ROLLBACK{TRAN
10、TRANSACTION}[{transaction_name
11、@tran_name_variable
12、savepoint_name
13、@savepoint_variable}]911.2事务的管理与应用4、SAVETRAN语句SAVETRAN语句允许部分地提交一个事务,同时仍能回滚这个
14、事务的其余部分。其语法格式为:SAVE{TRAN
15、TRANSACTION}[{
16、savepoint_name
17、@savepoint_variable}]1011.2事务的管理与应用例1:请用事务在PUBS数据库中创建一个存储过程pr_auth_user,当向authors表中插入一个作者信息,同时将该作者的姓名插入到用户表中的username列,pwd列的初始值为用户名。实现的T-SQL语句:CREATETABLEusremember(usernamevarchar(80),Pwdvarchar(50),Emailva
18、rchar(50),Phonechar(12))GO1111.2事务的管理与应用CREATEPROCpr_auth_user@au_idvarchar(11),@au_lnamevarchar(40),@au_fnamevarchar(40),@phonechar(12),@contractbit,--一般将具有默认值的参数放在后边定义,便于调用时省略@addressvarchar(50)=null,@cityvarchar(20)=null,@statechar(2)=null,@zipchar(5)=nullAS1
19、211.2事务的管理与应用BEGINTRANINSERTauthorsVALUES(@au_id,@au_lname,@au_fname,@phone,@address,@city,@state,@zip,@contract)IF@@ERROR<>0BEGINROLLBACKTRANSACTIONRETURNEND1311.2事务