SQL Server 2012数据库应用与开发教程(第三版) 教学课件 ppt 作者 卫 琳 主编 模块8 事务、锁和游标

上传人:E**** 文档编号:89361824 上传时间:2019-05-24 格式:PPT 页数:66 大小:985KB
返回 下载 相关 举报
SQL Server 2012数据库应用与开发教程(第三版) 教学课件 ppt 作者 卫 琳 主编 模块8 事务、锁和游标_第1页
第1页 / 共66页
SQL Server 2012数据库应用与开发教程(第三版) 教学课件 ppt 作者 卫 琳 主编 模块8 事务、锁和游标_第2页
第2页 / 共66页
SQL Server 2012数据库应用与开发教程(第三版) 教学课件 ppt 作者 卫 琳 主编 模块8 事务、锁和游标_第3页
第3页 / 共66页
SQL Server 2012数据库应用与开发教程(第三版) 教学课件 ppt 作者 卫 琳 主编 模块8 事务、锁和游标_第4页
第4页 / 共66页
SQL Server 2012数据库应用与开发教程(第三版) 教学课件 ppt 作者 卫 琳 主编 模块8 事务、锁和游标_第5页
第5页 / 共66页
点击查看更多>>
资源描述

《SQL Server 2012数据库应用与开发教程(第三版) 教学课件 ppt 作者 卫 琳 主编 模块8 事务、锁和游标》由会员分享,可在线阅读,更多相关《SQL Server 2012数据库应用与开发教程(第三版) 教学课件 ppt 作者 卫 琳 主编 模块8 事务、锁和游标(66页珍藏版)》请在金锄头文库上搜索。

1、模块8 事务、锁和游标,本章学习目标: 了解事务处理的概念和方法 掌握执行、撤销和回滚事务 了解引入锁的原因和锁的类型 掌握如何设置事务和锁的相关操作 了解游标的概念和分类 掌握游标的基本操作,任务8.1 工作场景导入,学校财务处让出纳小李和小王去银行取钱,对于同一个银行帐户A内有200元,小李进行提款操作100元,小王进行转帐操作100元到B帐户。如果事务没有进行隔离可能会并发如下问题: 1、第一类丢失更新: 2、脏读: 3、虚读: 4、不可重复读: 5、第二类丢失更新:,-【例1】 事务:从杨百万账户转给邱发财账户8万元。 create table 银行账户表 (账号 char(6), 账

2、户 nchar(10), 存款余额 money) insert 银行账户表(账号, 账户, 存款余额) values (100001,杨百万,1000000) insert 银行账户表(账号, 账户, 存款余额) values (100002,李有财,80000) insert 银行账户表(账号, 账户, 存款余额) values (100003,邱发财,10) select * from 银行账户表 update 银行账户表 set 存款余额=存款余额-80000 where 账号=100001 update 银行账户表 set 存款余额=存款余额+80000 where 账号=100003

3、 select * from 银行账户表,任务8.1 工作场景导入2,引导问题: 如何防止丢失更新? 如何防止脏读和虚读? 如何实现可重复读?,任务8.2 事务管理,1定义 事务(Transaction)是由一条或者多条T-SQL语句组成的一个工作单元,如果有其中任意一条语句执行失败被取消的话,这些语句的执行都被取消。,事务的概念,2事务的属性(ACDI属性): 原子性(Atomicity):对数据的修改,要么都完成,要么都取消。 一致性(Consistency):事务完成时,保持数据的一致性、完整性。 隔离性(Isolation):并行事务之间相互隔离。 持久性(Durability):事务

4、完成后,对数据所做的所有修改就保存到数据库中。,事务的概念,3特点: 可保证操作的一致性和可恢复性 可由用户定义,它包括一系列的操作或语句 每一条T-SQL语句都可以是一个事务 在多服务器环境中,可定义分布式事务,事务的模式,有三种模式:显式事务、隐性事务和自动提交事务 1自动提交事务 这是 SQL Server 的默认模式。每条单独的Transact-SQL语句都是一个事务, 在其完成后提交。不必指定任何语句控制事务。 【例1】自动提交事务 create table 学生会干部表 (姓名 nchar(4), 性别 nchar(1) check(性别 in (男,女), 职务 nchar(5)

5、 insert 学生会干部表(姓名,性别,职务) values (任重,男,主席) insert 学生会干部表(姓名,性别,职务) values (张驰,女,副主席) insert 学生会干部表(姓名,性别,职务) values (陈钧,南,体育部长) insert 学生会干部表(姓名,性别,职务) values (梁美娟,男,宣传文艺部长) insert 学生会干部表(姓名,性别,职务) values (乔美佳,女,组织部长) go -SELECT * FROM 学生会干部表,事务的模式,2显式事务 明确地用begin transaction 语句定义事务开始、用commit或 rollba

6、ck 语句定义事务结束。 【例2】 显式事务方式。 set xact_abort on begin transaction insert 学生会干部表(姓名,性别,职务) values (任重,男,主席) insert 学生会干部表(姓名,性别,职务) values (张驰,女,副主席) insert 学生会干部表(姓名,性别,职务) values (陈钧,南,体育部长) insert 学生会干部表(姓名,性别,职务) values (梁美娟,男,宣传文艺部长) insert 学生会干部表(姓名,性别,职务) values (乔美佳,女,组织部长) commit go -select * fr

7、om 学生会干部表,事务的模式,2显式事务 说明: SET XACT_ABORT:当 SET XACT_ABORT 为 ON 时,如果 Transact-SQL 语句产生运行时错误,整个事务将终止并回滚。为 OFF 时,只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。默认设置为OFF。 COMMI标志一个成功的隐性事务或用户定义事务的结束。提交事务中的一切操作,结束一个用户定义的事务,使得事务对数据库的修改有效。,事务的模式,3隐性事务 隐式事务是用set implicit_transactions on 不明显地定义事务开始,用 commit 或 rollback 语

8、句明显地定义事务结束的事务。 事务定义有事务开始和事务结束。事务开始可分为明显定义和不明显定义;事务结束也可分为明显定义和不明显定义。 set implicit_transactions On:前一个事务完成时自动启动新事务开始 Off:前一条语句完成时自动启动新事务开始,即返回自动提交模式。默认设置 当连接以隐性事务模式进行操作时, SQL Server将在提交或回滚当前事务后自动启动新事务。无须描述事务的开始,只需提交或回滚每个事务。隐性事务模式生成连续的事务链。,事务的模式,3隐性事务 在隐性事务模式设置为打开之后,当 SQL Server 首次执行下列任何语句时,都会自动启动一个事务:

9、 ALTER TABLE,INSERT,CREATE,OPEN,DELETE,REVOKE,DROP,SELECT,FETCH,TRUNCATE TABLE,GRANT,UPDATE 在发出 COMMIT 或 ROLLBACK 语句之前,该事务将一直保持有效。在第一个事务被提交或回滚之后,下次当连接执行这些语句中的任何语句时,SQL Server 都将自动启动一个新事务。SQL Server 将不断地生成一个隐性事务链,直到隐性事务模式关闭为止。,事务的模式,3隐性事务 【例3】 隐式事务方式。 set xact_abort on set implicit_transactions on -启

10、动隐性事务模式 insert 学生会干部表 (姓名,性别,职务) values (任重,男,主席) insert 学生会干部表 (姓名,性别,职务) values (张驰,女,副主席) insert 学生会干部表 (姓名,性别,职务) values (陈钧 ,南,体育部长) insert 学生会干部表 (姓名,性别,职务) values (梁美娟,男,宣传文艺部长) insert 学生会干部表1(姓名,性别,职务) values (乔美佳,女,组织部长) commit,8.2.6 事务的应用案例,【例8-1】事务的显式开始和显式回滚。 在SQL Server Management Studio

11、的【标准】工具栏上,单击【新建查询】按钮。此时将使用当前连接打开一个查询编辑器窗口。输入如下代码,单击【SQL编辑器】工具栏上的【执行】按钮,在【结果】/【消息】窗格中查看结果。 USE TempDB;/*使用TempDB作为当前数据库*/ GO -TempDB数据库中若存在用户创建的表TestTable,则删除之。 IF OBJECT_ID(NTempDBTestTable, NU)IS NOT NULL DROP TABLE TestTable; GO,CREATE TABLE TestTable(ID int,name nchar(10) GO DECLARE TransactionNa

12、me varchar(20);/*声明局部变量*/ set TransactionName = Transaction1;/*局部变量赋初值*/ PRINT TRANCOUNT/*向客户端返回当前连接上已发生的BEGIN TRANSACTION语句数*/ BEGIN TRAN TransactionName/*显式开始事务*/ PRINT TRANCOUNT INSERT INTO TestTable VALUES(1,李伟)/*插入记录到表*/ INSERT INTO TestTable VALUES(2,李强)/*插入记录到表*/ ROLLBACK TRAN TransactionName

13、/*显式回滚事务,取消插入操作,将表中数据恢复到初始状态*/ PRINT TRANCOUNT,BEGIN TRAN TransactionName PRINT TRANCOUNT INSERT INTO TestTable VALUES(3,王力) INSERT INTO TestTable VALUES(4,王为) If error0 -如果系统出现意外 ROLLBACK TRAN TransactionName -则进行回滚操作 Else COMMIT TRAN TransactionName/*显式提交事务*/ PRINT TRANCOUNT,SELECT * FROM TestTabl

14、e/*查询表的所有记录*/ -结果 -ID name - -3 王力 -4 王为 DROP TABLE TestTable/*删除表*/,【例8-2】为教师表插入一名教师的信息,如果正常运行则插入数据表中,反之则回滚。此题注意学习SAVE TRANSACTION语句。 USE TempDB;/*使用TempDB作为当前数据库*/ GO -TempDB数据库中若存在用户创建的表Teacher,则删除之。 IF OBJECT_ID(NTempDBTeacher, NU)IS NOT NULL DROP TABLE Teacher; GO,CREATE TABLE Teacher(ID int,na

15、me nchar(10),birthdaydatetime,depatrment nchar(4),salary int null) GO Begin transaction Insert into teacher values(101,周健,1990-03-22,计算机学院,1000) Insert into teacher values(102,黎明,1980-08-28,计算机学院,1000) select * from Teacher;,update teacher set salary=salary+100 -给每名教师的薪水加元 Save transaction savepoint1 Insert into teacher values(105,陈红,1975-03-22,计算机学院,null) If error0 rollback transaction savepoint1 If error0 rollback transaction Else commit transaction select * from Teacher;,【例8-3】删除“工业工程”系,将“工业工程”系的学生划归到“企业管理”系。 USE 教学管理 GO begin transaction my_transaction_dele

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号