- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第14讲 事务和锁
事务和锁 事务(Transaction)与锁定(Lock)可以确保数据在存储或修改过程中受到其他用户的中断时,能够正确地被存储、修改,而不会造成数据因被存储或修改到一半而导致数据不完整。 事务的概念 事务是SQL Server中的执行单元,它由一系列T-SQL语句组成。 事务的这种机制保证了一个事务或者提交后成功执行,或者提交后失败回滚(Rollback)。也就是说,执行事务的结果或是将对数据所要执行的操作全部完成,或是全部数据一点也不修改。 事务处理必须满足ACID原则: 原子性(Atomicity):事务必须作为一个最小工作单位 一致性(Consistency):事务完成后,所有的数据必须保持其合法性,即所有数据必须遵守数据库的约束和规则 隔离性(Iso1ation):一个事务所有的修改必须与其事务所作的修改隔离 持久性(Durability):事务执行完成后,其对数据库的修改将永久保持 SQL Server 以下列事务模式运行 自动提交事务 每条单独的语句都是一个事务。 显式事务 每个事务均以 BEGIN TRANSACTION 语句显式开始,以 COMMIT 或 ROLLBACK 语句显式结束。 隐式事务 在前一个事务完成时新事务隐式启动,但每个事务仍以 COMMIT 或 ROLLBACK 语句显式完成。 Transact-SQL语句和事务处理 事务是一种机制,是一个操作序列,它包含了一组数据库操作命令,即由一系列T-SQL语句组成。SQL Server的事务可分为两类:系统提供的事务和用户定义的事务。 系统提供的事务是指在执行某些T-SQL语句时,一条语句就构成了一个事务,这些语句是: 1.ALTER TABLE 2.CREATE 3.DELETE 4.DROP 5.REVOKE 例如执行创建表的语句: Create table users ( id int not null, username varchar(20), password varchar(20) ) 这条语句本身就构成了一个事务,它要么建立起含3列的表结构,要么对数据库没有任何影响。 在实际应用中,经常使用的是用户自定义的事务。事务的定义方法是: 用BEGIN TRAN[SACTION] 命令来标识一个事务的开始,用COMMIT TRAN[SACTION]或ROLLBACK TRAN[SACTION]命令来标识事务的结束。这两个命令之间的所有语句被视为一体,只有执行到 COMMIT TRAN[SACTION] 命令时,事务中对数据库的更新操作才算确认。 1. BEGIN TRANSACTION语句 BEGIN TRANSACTION语句定义事务的开始,其语法格式为: BEGIN TRAN[SACTION] [transaction_name | @tran_name_variable][WITH MARK[‘description’] ] 注意:BEGIN TRANSACTION语句的执行使全局变量@@TRANCOUNT的值加1。 其中参数: transaction_name指定事务的名称。 @tran_name_variable表示用户定义的、含有效事务名称的变量。变量只能声明为 CHAR、VARCHAR、NCHAR 或NVARCHAR 类型。 WITH MARK指定在日志中标记事务, description是描述该标记的字符串。 2. COMMIT TRANSACTION语句 COMMIT语句标志一个事务的结束,同时也是提交语句,其语法格式为: COMMIT [ TRAN[SACTION] [transaction_name | @tran_name_variable] ] 其中参数: COMMIT TRANSACTION语句的执行使全局变量@@TRANCOUNT的值减1。 标志一个事务的结束也可以使用COMMIT WORK语句,其语法格式为: COMMIT [WORK] 它与COMMIT TRANSACTION语句的差别在于COMMIT WORK语句不带参数。 【例】定义一个事务,删除stuinfo数据库的student表中的一行数据。 BEGIN TRAN USE stuinfo DELETE FROM student WHERE username=’Bill’ IF exists(SELECT * FROM sc ,deleted d WHERE sc.sno = d.sno) Begin ROLLBACK TRANSACTION Print ‘有选课记录,不能删除!’ Return end COMMIT TRAN
原创力文档


文档评论(0)