- 1、本文档共25页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第14讲事务与触发器祥解.ppt
回顾 存储过程(Procedure)的定义 输入参数 @参数名 输出参数 @参数名 output 执行状态值,0表示成功,-99~-1表示系统发现的执行错误,其余的值表示自定义的错误。 存储过程的执行 EXECUTE PROC 过程名 参数[output] … 思考: 余额表(帐号,余额) “001”账户向“002”账户转X元,手续费1%,需要完成如下2项数据操作: 操作1:001账户减X*1.01, 操作2:002账户加X. 完成以下存储过程proc_转帐,用于实现转帐业务的数据操作功能。 CREATE PROC proc_转帐 @outId char(20), @inId char(20), @amout int AS --SQL 体 数据库原理与应用 第14讲 事务与触发器 1. 事务 关键词: BEGIN TRAN, COMMIT TRAN,ROLLBACK TRAN 10.5 事务处理 事务(Transaction) 是一个逻辑工作单元。单元中的所有操作要么全部成功,要么全部取消。 事务的必要性 (1) 如果一个业务需要多个数据操作,而只有其中的部分操作成功,则数据的一致性将会被破坏。例如:银行转帐,至少需要两项操作:甲账户扣除,乙账户增加,不允许只有一项操作成功,而另一项失败。 (2)导致错误的原因可分为两类:一是可以预见的逻辑错误,比如账户不存在,余额不足等。二是不可预见的错误,比如DBMS停止服务、操作延时导致中断等等。 (3) 把一个业务所需的多个操作放入一个事务,可以保证所有操作作为一个单元来执行。 事务执行原理 事务作为一个整体提交,在提交之前,所有的操作被临时存放起来,并没有保存到数据库中。 任何一个操作错误,数据将回退到事务开始时的状态,临时更改被全部取消。 事务提交后,数据更新被保存到数据库。 T-SQL中管理事务 BEGIN TRAN [事务名]--开始事务 操作1 if 错误 ROLLBACK--回退 操作2 if 错误 ROLLBACK--回退 操作3 if 错误 ROLLBACK--回退 …… COMMIT TRAN [事务名]--提交事务 事物的属性(ACID) 原子性(Atomicity)——事务中的操作要么全成功,要么全回退, 一致性(Consistency)——事务执行前后数据在逻辑上是一致的, 隔离性(Isolation)——甲事务执行时,乙事务不能得到甲事务中间的状态。即事务串行化,乙事务得到的数据要么是甲事务执行前的状态,要么是执行后的状态。 持久性(Durability)——事务执行完后,对数据进行的更改将被保存。 事务的3种模式 1.显式事务:用BEGIN TRAN开始事务,用COMMIT 提交事务,用ROLLBACK回退事务。 (重点) 2.自动提交事务:是数据引擎的缺省模式,每个单独的语句在完成后被提交,失败后被回滚。 3.隐式事务:一个语句是一个新的事务,直到结束这个事务(提交或回退)。 10.5 事务处理 使用事务的经验: 在存储过程中管理事务,控制事务的启动、提交和回滚。事务中的所有操作包含在:BEGIN TRAN和COMMIT TRAN之间。自定义存储过程状态值,以反应事务是否有效执行。 (2) 对事务中的每个操作进行跟踪,一般用到两个系统变量: @@ error和@@ rowcount。 用系统变量@@error跟踪执行状态,当@@error0时,说明操作发生了执行错误; 用系统变量@@rowcount跟踪受影响的行数,如果@@rowcount与预期不符,说明操作发生了业务错误。 发生错误时,用ROLLBACK TRAN回退事务。 在事物中要用到的两个系统变量:
@@ERROR
如果上一个Transact-SQL 语句执行成功,@ERROR 系统函数将返回0;如果该语句生成错误,@@ERROR 将返回错误号。
@@ROWCOUNT
(Transact-SQL) 返回受上一语句影响的行数
示例: 余额表(帐号,余额) “001”账户向“002”账户转X元,手续费1%,需要完成如下2项数据操作: 操作1:001账户减X*1.01, 操作2:002账户加X. 可能发生的错误如下: 可控的错误:没有001账号,没有002账号,001账号余额不足。 不可控的错误:操作1失败,操作2失败。 (事务定义见 代码) CREATE PROC proc_转帐
@inId char(20),--转进账户
@outId char(20),--转出账户
@amout int--转出账户余额
AS
if NOT EXISTS(SELECT 账号 FROM
文档评论(0)