事务编程.ppt_第1页
事务编程.ppt_第2页
事务编程.ppt_第3页
事务编程.ppt_第4页
事务编程.ppt_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、11.2 事务编程 11.2.2 事务类型 事务是单个的工作单元。如果某一事务成功,则在该事务中进行的所有数据修改均会提交,成为数据库中的永久组成部分。如果事务遇到错误且必须取消或回滚,则所有数据修改均被清除。 SQL Server 以下列事务模式运行。 自动提交事务:每条单独的语句都是一个事务。 显式事务:每个事务均以 BEGIN TRANSACTION 语句显式开始,以 COMMIT 或 ROLLBACK 语句显式结束。 隐式事务:在前一个事务完成时新事务隐式启动,但每个事务仍以 COMMIT 或 ROLLBACK 语句显式完成。 隐式事务可以通过使用SET IMPLICIT_TRANSA

2、CTIONS ON | OFF语句来打开或关闭。当参数为ON时将设置为隐式事务模式,为OFF时,则返回自动提交事务模式。 批处理级事务:只能应用于多个活动结果集(MARS),在MARS会话中启动的 Transact-SQL显式或隐式事务变为批处理级事务。当批处理完成时没有提交或回滚的批处理级事务自动由SQL Server进行回滚。,11.2.3 事务语句 BEGIN DISTRIBUTED TRANSACTION (Transact-SQL) BEGIN TRANSACTION (Transact-SQL) COMMIT TRANSACTION (Transact-SQL) COMMIT WO

3、RK (Transact-SQL) ROLLBACK TRANSACTION (Transact-SQL) ROLLBACK WORK (Transact-SQL) SAVE TRANSACTION (Transact-SQL) SET IMPLICIT_TRANSACTIONS (Transact-SQL) TRANCOUNT (Transact-SQL),11.2.4 自动提交事务 例1 若一个事务有编译错误,则自动回滚该事务所在批处理中的所有事务。 USE ST SET NOCOUNT ON IF OBJECT_ID(table1,U) IS NOT NULL DROP TABLE ta

4、ble1 GO CREATE TABLE table1(col1 INT PRIMARY KEY,col2 CHAR(2) INSERT INTO table1 VALUES(1,xx) GO INSERT INTO table1 VALUES(2,aa) INSERT INTO table1 VALUSE(3,bb) -语法错 INSERT INTO table1 VALUES(4,cc) GO 运行以上程序,显示信息如下: 消息102,级别15,状态1,第2 行 VALUSE 附近有语法错误。 SELECT * FROM table1 查询结果: col1 col2 - - 1 xx,例2

5、 若一个事务有运行错误,则只自动回滚该事务。 USE ST SET NOCOUNT ON IF OBJECT_ID(table1,U) IS NOT NULL DROP TABLE table1 GO CREATE TABLE table1(col1 INT PRIMARY KEY,col2 CHAR(2) INSERT INTO table1 VALUES(1,xx) GO INSERT INTO table1 VALUES(2,aa) INSERT INTO table1 VALUES(1,bb) -运行错误,主键重复 INSERT INTO table1 VALUES(4,cc) GO

6、运行以上程序,显示信息如下: 消息2627,级别14,状态1,第2 行 违反了PRIMARY KEY 约束PK_table1_3213663B375B2DB9。不能在对象dbo.table1 中插入重复键。 语句已终止。 SELECT * FROM table1,11.2.5 显式事务 例3 事务内设置保存点。 USE ST IF OBJECT_ID(table1,U) IS NOT NULL DROP TABLE table1 CREATE TABLE table1(col1 INT PRIMARY KEY,col2 CHAR(2) BEGIN TRANSACTION t1 -显式事务t1开

7、始 INSERT INTO table1 VALUES(1,aa) SAVE TRANSACTION t1 -保存点1 INSERT INTO table1 VALUES(2,bb) SAVE TRANSACTION t1 -保存点2 INSERT INTO table1 VALUES(3,cc) ROLLBACK TRANSACTION t1 -回滚到离该语句最近的保存点,事务t1结束 INSERT INTO table1 VALUES(4,dd) SELECT * FROM table1 运行结果: col1 col2 - - 1 aa 2 bb 4 dd 由以上结果可知,ROLLBACK

8、 TRANSACTION t1语句只回滚到离该语句最近的保存点,例4 若李平(12341288)有20000元以上,则李平向王中华(12342288)转帐20000元。 USE ST IF OBJECT_ID(存款,U) IS NOT NULL DROP TABLE 存款 CREATE TABLE 存款 (帐号 CHAR(8) PRIMARY KEY, 姓名 CHAR(8), 余额 SMALLMONEY) INSERT INTO 存款 VALUES(12341288,李平,30000) INSERT INTO 存款 VALUES(12342288,王中华,20000) SELECT * FRO

9、M 存款 BEGIN TRANSACTION t1 IF (SELECT 余额 FROM 存款 WHERE 帐号=12341288)=20000 BEGIN UPDATE 存款 SET 余额=余额-20000 WHERE 帐号=12341288 UPDATE 存款 SET 余额=余额+20000 WHERE 帐号=12342288 END ELSE PRINT 李平(12345688)存款余额不足元,转帐失败! COMMIT TRANSACTION t1 SELECT * FROM 存款 GO,例5 马鲜花与牛得草是一对好朋友,他们要求到同一所学校读书。 USE ST BEGIN TRANSA

10、CTION IF EXISTS(SELECT sname FROM student WHERE sname IN(马鲜花,牛得草) DELETE FROM student WHERE sname IN (马鲜花,牛得草) insert into student values(200215128,马鲜花, 女,1994-06-10,162,MA,null); insert into student values(200215129,牛得草, 男,1993-12-10,170,IS,null); COMMIT TRANSACTION SELECT * FROM student,11.2.6 隐式事

11、务 例6 隐式事务 USE ST SET NOCOUNT ON IF OBJECT_ID(table1,U) IS NOT NULL DROP TABLE table1 CREATE TABLE table1(col INT PRIMARY KEY) INSERT INTO table1 VALUES(1) PRINT 1.有效事务个数:+CAST(TRANCOUNT AS CHAR(2) PRINT 一.显式事务 BEGIN TRANSACTION INSERT INTO table1 VALUES(2) INSERT INTO table1 VALUES(3) INSERT INTO ta

12、ble1 VALUES(4) PRINT 2.有效事务个数:+CAST(TRANCOUNT AS CHAR(2) COMMIT TRANSACTION PRINT 3.有效事务个数:+CAST(TRANCOUNT AS CHAR(2) GO,PRINT 设置SET IMPLICIT_ TRANSACTIONS 为ON PRINT 二.隐式事务 GO SET IMPLICIT_TRANSACTIONS ON GO INSERT INTO table1 VALUES(5) INSERT INTO table1 VALUES(6) PRINT 4.有效事务个数:+CAST(TRANCOUNT AS

13、CHAR(2) COMMIT TRANSACTION PRINT 5.有效事务个数:+CAST(TRANCOUNT AS CHAR(2) GO INSERT INTO table1 VALUES(7) INSERT INTO table1 VALUES(8) INSERT INTO table1 VALUES(1) -运行错误 PRINT 6.有效事务个数:+CAST(TRANCOUNT AS CHAR(2) COMMIT TRANSACTION INSERT INTO table1 VALUES(9) COMMIT TRANSACTION PRINT 7.有效事务个数:+CAST(TRANC

14、OUNT AS CHAR(2) SELECT * FROM table1 GO,同学们,再见!,6.6 模式的分解习题 1. 已知关系模式R,U=ABCDE,F=AC,BC,CD,DEC,CEA,F已为最小FD集。给定U的一个划分:U1=AD,U2=AB,U3=BE,U4=CDE,U5=AE。 根据给定的U的划分求出R的分解; 判断是否为无损连接分解; 判断是否为保持函数依赖的分解。 2. 设有关系模式“教学(U,F)”,其中 U=学号,姓名,性别,院系,办公地点,课号,成绩,教师号 F=学号姓名,学号性别,学号院系,院系办公地点,(学号,课号)成绩, 教师号课号,(学号,课号教师号,(学号,

15、教师号)课号 用字母表示为:A:学号, B:姓名,C:性别,D:院系, E:办公地点,F:课号,G:成绩,H:教师号 R,U=ABCDEFGH, F=AB,AC,AD,DE,AFG,HF,AFH,AHF。 (1)求与F等价的最小函数依赖集; (2)求R的所有候选键; (3)R为几范式?为什么? (4)对U进行划分如下:U1= ABCD,U2= HF,U3= AFG,U4= DE,按该划分求R的分解=R1,R2,R3,R4;判断分解的无损连接性及保持依赖性。 (5)将R无损连接且保持依赖地分解成3NF模式集; (6)将R无损连接地分解成BCNF模式集,分解后的是否保持函数依赖?若不保持则丢失了哪些函数依赖?,3. 设有关系模式R,U=ABCD,数据依赖集: D=AB,BA,ACD,BCD,ADC, BDC, ACD,BCD F= AB,BA,ACD,BCD,ADC,BDC (1)求与F等

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论