资源描述:
《事务、锁定、自动化和服务》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第10章事务、锁定、自动化和服务10.1事务10.2锁定10.3SQLServer2008自动化管理10.4SQLServer2008服务10.1事务10.1.1事务与ACID属性在形式上,事务是由ACID属性标识的。术语“ACID”是一个简称,每个事务的处理必须满足ACID原则,即:(1)原子性。原子性意味着每个事务都必须被认为是一个不可分割的单元。(2)一致性。不管事务是完全成功完成还是中途失败,当事务使系统中的所有数据处于一致的状态时存在一致性。(3)隔离性。隔离性是指,每个事务在它自己的空间发生,和其他发生在系统中的事务隔离,而且事务的结果只有在它完全被执行时才能
2、看到。(4)持久性。持久性意味着,一旦事务执行成功,在系统中产生的所有变化将是永久的。10.1.2多用户使用的问题丢失更新(lostupdate)指,当两个或多个事务选择同一行,然后基于最初选定的值更新该行时,由于每个事务都不知道其他事务的存在,因此最后的更新将重写由其他事务所做的更新,这将导致数据丢失。脏读(dirtyread)指,一个事务正在访问数据,而其他事务正在更新该数据,但尚未提交,此时就会发生脏读问题,即第一个事务所读取的数据是“脏”(不正确)数据,它可能会引起错误。当一个事务多次访问同一行而且每次读取不同的数据时,会发生不可重复读(unrepeatabler
3、ead)问题。当一个事务对某行执行插入或删除操作,而该行属于某个事务正在读取的行的范围时,会发生幻读(phantomread)问题。10.1.3事务处理1.开始事务在SQLServer中,显式地开始一个事务可以使用BEGINTRANSACTION语句。语法格式:BEGIN{TRAN
4、TRANSACTION}[{transaction_name
5、@tran_name_variable}[WITHMARK['dEscription']]][;]10.1.3事务处理2.结束事务COMMITTRANSCATION语句是提交语句,它将事务开始以来所执行的所有数据都修改成为数据库的永
6、久部分,也标志一个事务的结束,其语法格式为COMMIT{TRAN
7、TRANSACTION}[transaction_name
8、@tran_name_variable]][;]标志一个事务的结束也可以使用COMMITWORK语句。语法格式为COMMIT[WORK]10.1.3事务处理3.撤销事务若要结束一个事务,可以使用ROLLBACKTRANSACTION语句。它使得事务回滚到起点,撤销自最近一条BEGINTRANSACTION语句以后对数据库的所有更改,同时也标志了一个事务的结束。语法格式:ROLLBACK{TRAN
9、TRANSACTION}[transaction_n
10、ame
11、@tran_name_variable][;]另外,一条ROLLBACKWORK语句也能撤销一个事务,功能与ROLLBACKTRANSACTION语句一样,但ROLLBACKTRANSACTION语句接受用户定义的事务名称。语法格式:ROLLBACK[WORK][;]10.1.3事务处理4.回滚事务ROLLBACKTRANSACTION语句除了能够撤销整个事务,还可以使事务回滚到某个点,不过在这之前需要使用SAVETRANSACTION语句来设置一个保存点。SAVETRANSACTION的语法格式:SAVE{TRAN
12、TRANSACTION}{savepoint_
13、name
14、@savepoint_variable}[;]SAVETRANSACTION语句会向已命名的保存点回滚一个事务。如果在保存点被设置后,当前事务对数据进行了更改,则这些更改会在回滚中被撤销。语法格式为ROLLBACK{TRAN
15、TRANSACTION}[savepoint_name
16、@savepoint_variable][;]10.1.3事务处理【例10.1】定义一个事务,向PXSCJ数据库的XSB表添加一行数据,然后删除该行数据;但执行后,新插入的数据行并没有删除,因为事务中使用了ROLLBACK语句将操作回滚到保存点My_sav,即删除前的状态。BEGINT
17、RANSACTIONMy_tranUSEPXSCJINSERTINTOXSBVALUES('081115','胡新华',1,'1991-06-27','计算机',50,NULL)SAVETRANSACTIONMy_savDELETEFROMXSBWHERE学号='081115'ROLLBACKTRANMy_savCOMMITWORKGO10.1.3事务处理执行完上述语句后使用SELECT语句查询XSB表中的记录:SELECT*FROMXSBWHERE学号='081115'执行结果如下:10.1.4事务隔离级在SQLServer