- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《数据库原理与应用》11.事务和游标的创建和使用
孙 发 勤 扬州大学新闻与传媒学院 YZU.SUN@163.COM 创建事务 提交事务 回滚事务 回滚事务的一部分 用锁 理解死锁 声明游标 打开游标 从游标取数据 关闭游标 例: 一个员工代码为‘000002’的内部候选人已经被选定为‘Sales Manager’( 岗位代码为0001)岗位。这必须在Employee表中被更新,当前已在该岗位的人数也需要在Position表中更新。 上面要做的UPDATE语句如下: UPDATE Employee SET cCurrentPosition = 0001 WHERE cEmployeeCode= 000002 UPDATE Position SET iCurrentStrength=iCurrentStrength + 1 WHERE cPositionCode=0001’ 系统崩溃是由于两个更新之间导致数据不一致性而引起的。需要防止这种情况,要确保两个更新或者都发生或者都不发生。 怎样防止数据的不一致性? 事务 一个事务可以被定义为作为工作的单个的逻辑单元被一起执行的一串的操作。 单个的工作单元必须具有称为ACID(原子性,一致性,独立性,和持久性)的四个性质 原子性 一致性 独立性 持久性 怎样防止数据的不一致性(续) BEGIN TRANSACTION:该语句标志显示事务的开始 语法 BEGIN TRAN[SACTION] [transaction_name | @tran_name_variable] COMMIT TRANSACTION或 COMMIT WORK:语句标志显式事务的结束点 语法 COMMIT [TRAN[SACTION][transaction_name |@tran_name_variable]] 怎样防止数据的不一致性(续) Autocommit事务 autocommit模式是SQL Server的缺省事务管理模式,当使用SET AUTOCOMMIT OFF开启事务支持时,所有insert,delete或update操作列表存储在内存中,因此,当进行ROLLBACK事务时,这些操作能够被撤销。跨越几百个数据改变的事务将会花费很多的内存知道下一个COMMIT或ROLLBACK清除了操作列表。 结果: 事务的使用可以避免数据的不一致性 UPDATE语句可通过使用BEGIN TRANSACTION和COMMIT TRANSACTION语句来维持其原子性 执行事务 动作: 在 Query Analyzer窗口中,键入: BEGIN TRANSACTION trnUpdatePosition UPDATE Employee SET cCurrentPosition = 0001 WHERE cEmployeeCode= 000002 UPDATE Position SET iCurrentStrength = iCurrentStrength + 1 WHERE cPositionCode = 0001 COMMIT TRANSACTION trnUpdatePosition 验证两个表中的数据都已被更新 动作: 下面的SELECT语句来验证那些行已被更新: SELECT * FROM Position WHERE cPositionCode = 0001? SELECT * FROM Employee WHERE cEmployeeCode = 000002 识别下面单个工作单元的性质: 由并发事务引起的任何数据修改必须与其他并发事务所作的修改隔离开来 所有的数据修改都被执行或者都没有被执行 已完成事务的任何数据改变在系统中永久起作用 事务成功地完成后所有的数据必须处于一致的状态 2.回复改变 职位0015已经招募了10个候选人。为了反映这一变化,对于RequisitionCode 0015 ,Requisition表的NuOfRequir属性将会减少10。还有,对于cPositionCode 0015,Position表的iCurrentStrength属性要加10,使用下面命令: UPDATE Requisition set NuOfRequir = NuOfRequir - 10 WHERE RequisitionCode=0015 2.回复改变(续) UPDATE Position set iCurrentStrength=iCurrentStrength + 10 WHERE cPositionCode=0015’ 这两个语句都应该
文档评论(0)