第10讲 事务与游标编程
第10讲 事务与游标编程
●问题 在银行等重要交易中,要使 组SQL语句同时执行或撤消, 如何做? 问要对查询结果进行一行行的操 题 作,如何做到?
问 题 问题 在银行等重要交易中,要使一 组SQL语句同时执行或撤消, 如何做? 要对查询结果进行一行行的操 作,如何做到?
●事务是作为单个逻辑工作单元 执行的一系列操作。 9思考:事务和批处理的区别? 事务的属性(ACID) 事务概述 9原子性:原子工作单元 9一致性:保证数据的一致性 9隔离性:并发事务之间所做的修 改要隔高 并发操作:几个用户程序同时读写 个数据的情况 持久性:对系统的影响要持久
事 务 概 述 事务是作为单个逻辑工作单元 执行的一系列操作。 思考:事务和批处理的区别? 事务的属性(ACID) 原子性:原子工作单元 一致性:保证数据的一致性 隔离性:并发事务之间所做的修 改要隔离 并发操作:几个用户程序同时读写 一个数据的情况 持久性:对系统的影响要持久
格式: BEGIN TRANSACTION 2. COMMIT TRANSACTION 简单事务编程 3. ROLLBACK TRANSACTION (问题】简单的事务提交和 回滚 说明:如果没有明确给出 BEGIN TRANSACTION语句, 则 SQL Server是将每个SQL语句 都当成一个事务进行执行
简 单 事 务 编 程 格式: 1. BEGIN TRANSACTION 2. COMMIT TRANSACTION 3. ROLLBACK TRANSACTION 【问题】简单的事务提交和 回滚 说明:如果没有明确给出 BEGIN TRANSACTION语句, 则SQL Server是将每个SQL语句 都当成一个事务进行执行
嵌套事务只有在提交了最外层 的事务后,数据才执行永久修 改 事务的嵌套 嵌套事务时, ROLLBACK语句 只能将所有内层事务回滚到最 外层的 BEGIN TRANSACTION 语句
事 务 的 嵌 套 嵌套事务只有在提交了最外层 的事务后,数据才执行永久修 改 嵌套事务时,ROLLBACK语句 只能将所有内层事务回滚到最 外层的BEGIN TRANSACTION 语句
利用封锁技术可以有效地保 证数据的一致性 封锁粒度:可以锁定在行 列、表、数据库等不同的单 封锁 元上 SQL Server具有自动和强制封 锁的功能
封 锁 利用封锁技术可以有效地保 证数据的一致性 封锁粒度:可以锁定在行、 列、表、数据库等不同的单 元上 SQL Server具有自动和强制封 锁的功能
锁模式 1.共享锁( Share lock) 2.排他锁( Exclusive Lock) 3.更新锁( Update Lock) 锁模式 各种锁模式的兼容性 共享锁更新锁排他锁 共享锁YES YES NO 更新锁YES NO NO 排他锁NO NO NO
锁 模 式 锁模式: 1. 共享锁(Share Lock) 2. 排他锁(Exclusive Lock) 3. 更新锁(Update Lock) 各种锁模式的兼容性: 共享锁 更新锁 排他锁 共享锁 YES YES NO 更新锁 YES NO NO 排他锁 NO NO NO
当两个事务 trans1和 trans2在下 列的状态时,将产生死锁: 1. Trans l:存取数据项Ⅹ和Y 2. Trans2:存取数据项Y和Ⅹ 死锁 9〖说明】如果事务 Trans1封锁了 数据项Ⅹ,事务 Trans2封锁了数 据项Y,则 Trans1等待 Trans2释放 Y上的锁, Trans2等待 Trans l释放 X上的锁。因此, Trans 1和 Trans2 都无限地等待对方打开锁住的数 据项,则产生死锁
死 锁 当两个事务trans1和trans2在下 列的状态时,将产生死锁: 1. Trans1:存取数据项X和Y 2. Trans2:存取数据项Y和X 【说明】如果事务Trans1封锁了 数据项X,事务Trans2封锁了数 据项Y,则Trans1等待Trans2释放 Y上的锁,Trans2等待Trans1释放 X上的锁。因此,Trans1和Trans2 都无限地等待对方打开锁住的数 据项,则产生死锁
●〖死锁示例】 说明: SQL Server能自动发现 死锁⌒续 并解除死锁 e避免死锁的措施:P237
死 锁 ( 续 ) 【死锁示例】 说明: SQL Server能自动发现 并解除死锁 避免死锁的措施:P.237
Coulacoulame Kind Credit Teacher DepartNol School Timel LimitMun WillIum/ Choosellun 实用东信息技术31人风0周二56节20430 0N技开发信技2程0月5的节0310 陽崔息索康信息技术2蒴0娩1⑩31 游标引例 以前:使用 seLECT语句对表格进行耷询 返回的结果集包括所有满足条件的行 思考:如果要求每次只显示表格(例如 上面的 Course表)中的一行,该如何处 理?—这在将TSQL嵌入到其他高级 语言(如C、VC、 Del ph等)的编程中 经常用到
游 标 引 例 以前:使用SELECT语句对表格进行查询, 返回的结果集包括所有满足条件的行。 思考:如果要求每次只显示表格(例如 上面的Course表)中的一行,该如何处 理?——这在将T-SQL嵌入到其他高级 语言(如C、VC、Delphi等)的编程中 经常用到