数据库原理及应用.ppt
《数据库原理及应用.ppt》由会员分享,可在线阅读,更多相关《数据库原理及应用.ppt(120页珍藏版)》请在装配图网上搜索。
1、1,第五章 T-SQL,本章要求: 了解T-SQL的基础知识 了解存储过程的使用 了解触发器的作用及其使用方法 了解游标的作用及其使用方法 理解事务的概念和基本操作,2,第五章 T-SQL,本章内容:,T-SQL基础,1,,,3,T-SQL基础,T-SQL定义、功能、组成 定义 Transact-SQL(简写为T-SQL)是SQL Server对标准SQL功能的增强与扩充 功能 T-SQL可以完成数据库上的各种操作,而且可以编制复杂的例行程序 组成,系统内置函数,变量 显示和输出语句 流程控制语句 CASE表达式,标识符 注 释 批处理 运算符,4,T-SQL基础,标识符 定义 标识符是指用户
2、在SQL Server中定义的服务器、数据库、数据库对象、变量和列等对象名称 分类 常规标识符 定界标识符,5,T-SQL基础,常规标识符 命名原则 标识符长度可以为1128个字符。 标识符的首字符必须为Unicode 2.0标准所定义的字母或_、、符号。 标识符第一个字符后面的字符可以为Unicode Standard 2.0所定义的字符、数字或、#、$、_符号 标识符内不能嵌入空格和特殊字符。 标识符不能与SQL Server中的保留关键字同名,SELECT * FROM information,,,此为常规标识符,6,T-SQL基础,定界标识符 实质 包含在双引号 (“) 或者方括号 (
3、 ) 内的标识符号 示例 【例5-1】,CREATE table table ( column1 CHAR(10) NOT NULL PRIMARY KEY, column2 INT ),表名Table与T-SQL保留字相同,用方括号来分隔,7,T-SQL基础,注释 定义 注释是程序代码中不执行的文本字符串。 分类 --- 用于单行注释 /* */ 用于多行注释,8,【例5-2】使用单行与多行注释,,T-SQL基础,USE School GO SELECT * FROM Student- -从表Student中查询信息 GO /*下面SQL语句 查询学生信息*/ SELECT *
4、FROM Student GO,9,T-SQL基础,批处理 说明 多条语句作为一个批处理执行时,其语句之间用GO分隔 【例5-3】批处理语句 USE School GO CREATE VIEW v_Student AS SELECT * FROM Student GO SELECT * FROM v_Student GO,10,T-SQL基础,运算符 算术运算符 位运算符 比较运算符 逻辑运算符,赋值运算符 字符串连接符 单目运算符 运算符优先级,11,T-SQL基础,算术运算符 加(+) 减(-) 乘(*) 除(/) 取模(%),12,T-SQL基础,位运算符 对整数或二进制数据进行按位逻辑
5、运算 与( SELECT birthday =Birthday FROM Student WHERE SName=张三 PRINT 张三的生日是:+Convert(CHAR(20),birthday),46,T-SQL基础,字符串函数,47,T-SQL基础,【例5-18】使用 xxx 替换 abcdefghi 中的字符串 cde,SELECT REPLACE(abcdefghi,cde,xxx),【例5-19】使用LTRIM消除字符串左边的空格,SELECT 消除左边空格的结果:+LTRIM( 1234 ),48,T-SQL基础,日期和时间函数,49,T-SQL基础,【例5-20】取得系统当
6、前日期,SELECT 当前日期:+convert(CHAR(50),GETDATE()),【例5-21】取得系统当前日期中的月份,SELECT 月份为:+ convert(CHAR(10), DATEPART(month, GETDATE())),50,T-SQL基础,聚合函数,【例5-22】取得数据库所在的计算机名,SELECT HOST_NAME(),51,T-SQL基础,数学函数,52,T-SQL基础,【例5-23】显示使用 CEILING 函数的正数、负数和零值,SELECT CEILING(123.45), CEILING(-123.45), CEILING(0.0
7、),结果:124 -123 0,53,第五章 T-SQL,本章内容:,T-SQL基础,1,,,54,存储过程,简介 定义: SQL Server提供的一种方法,它可以将一些固定的操作集中起来由SQL Server数据库服务器来完成,以实现某个任务 分类 系统存储过程 本地存储过程 临时存储过程 远程存储过程 扩展存储过程 CLR过程,55,存储过程,系统存储过程 系统存储过程就是系统创建的存储过程,是在SQL Server安装成功后,就已经存储在系统数据库中了,目的在于能够方便地从系统表中查询信息或完成与更新数据库表相关的管理任务或其它的系统管理任务 系统过程以“sp_”为开头,并存放在“sy
8、s”构架中,为数据库管理者所有。,56,存储过程,本地存储过程 本地存储过程是在用户数据库中创建的存储过程。本地存储过程实际上就是用户存储过程,在以后的数据库开发中,涉及到的存储过程几乎都是本地存储过程。 这种存储过程是用户自己创建的普通数据库,完成特定数据库操作任务,其名称不能以“sp_”为前缀。,57,存储过程,临时存储过程 属于本地存储过程。我们在创建本地存储过程时,如果在本地存储过程的名称前有一个“#”,该存储过程就被称为局部临时存储过程,只能在一个用户会话中使用;如果在本地存储过程的名称前有两个“##”,该存储过程就被称为全局临时存储过程,可以在所有用户会话中使用。 远程存储过程 指
9、从远程服务器上调用的存储过程,也就是非本地服务器上的存储过程。,58,存储过程,扩展存储过程 是指在SQL Server环境之外执行的动态链接库DLL。SQL Server可以动态装载并执行它们。扩展存储过程只能添加到Master数据库。 CLR过程 是SQL Server 2005新增的存储过程,是针对微软的.NET Framework建立的,可以接受和返回用户提供的参数。CLR存储过程要在Microsoft Visual Studio 2005中来实现,59,存储过程,存储过程优点 存储过程因为SQL语句已经预编绎过了,因此运行的速度比较快,平均要比SQL语句执行速度快上210倍。 存储过
10、程可以接受输入参数、输出参数、返回单个或多个结果集以及返回值。可以向程序返回错误原因。 存储过程可以包含程序流、逻辑以及对数据库的查询。同时隐藏了数据逻辑,提高系统安全性 存储过程运行比较稳定,不会有太多的错误。只要一次成功,以后都会按这个程序运行。 存储过程主要是在服务器上运行,减少对客户机的压力,60,存储过程,T-SQL创建和执行存储过程 基本语句 创建: CREATE PROCEDURE 存储过程名 参数1 数据类型 = 默认值 OUTPUT, , 参数n 数据类型 = 默认值 OUTPUT AS SQL语句 执行: EXEC procedure_name Value_List,
11、61,存储过程,【例5-24】创建一存储过程,检索软件学院学生的记录,USE student GO CREATE PROCEDURE pr_student AS SELECT SNO, SName ,Ssex FROM Student WHERE SDept=软件学院,62,存储过程,【例5-25】执行一个名为pr_student的存储过程,USE student GO pr_studnet,63,存储过程,【例5-26】创建一存储过程,插入一个课程信息,CREATE PROC AddCourse (c_no VARCHAR(12), c_name VARCHAR(20), c_period
12、INT, c_credit INT ) AS INSERT INTO Course VALUES(c_no, c_name, c_period,c_credit ),64,存储过程,【例5-27】调用AddCourse存储过程插入一条课程号为gdsx、课程名为高等数学、学时80、学分3的记录,EXEC AddCourse gdsx,高等数学,80,3,65,存储过程,修改和删除存储过程 基本语句格式 修改 ALTER PROCEDURE 存储过程名 参数1 数据类型 = 默认值 OUTPUT, , 参数n 数据类型 = 默认值 OUTPUT AS SQL语句 删除:D
13、ROP PROCEDURE 存储过程名,66,存储过程,【例5-28】修改存储过程,USE student GO --创建存储过程p_1 CREATE proc p_1 As SELECT * FROM course GO --修改存储过程p_1 ALTER PROC p_1 AS SELECT SName,SDept FROM Student GO,67,存储过程,常用系统存储过程,68,存储过程,EXEC sp_databases EXEC sp_renamedb Northwind,Northwind1 USE stuDB GO EXEC sp_tables EXEC sp_column
14、s stuInfo EXEC sp_help stuInfo EXEC sp_helpconstraint stuInfo EXEC sp_helpindex stuMarks EXEC sp_helptext view_stuInfo_stuMarks EXEC sp_stored_procedures,修改数据库的名称(单用户访问),列出当前系统中的数据库,当前数据库中查询的对象的列表,返回某个表列的信息,查看表stuInfo的信息,查看表stuInfo的约束,查看表stuMarks的索引,查看视图的语句文本,查看当前数据库中的存储过程,【例5-29】系统存储过程,69,第五章 T-SQL
15、,本章内容:,T-SQL基础,1,,,70,触发器,为什么需要触发器,帐户信息表bank,交易信息表transInfo,张三取钱200 问题: 没有自动修改张三的余额,,,,最优的解决方案就是采用触发器: 它是一种特殊的存储过程 也具备事务的功能 它能在多表之间执行特殊的业务规则,张三开户1000元,李四开户1元,71,触发器,什么是触发器,赵二,,插入,,删除,触发器触发,赵二退休,赵二,员工表,退休员工表,72,触发器,什么是触发器 触发器是在对表进行插入、更新或删除操作时自动执行的存储过程 触发器通常用于强制业务规则 触发器是一种高级约束,可以定义比用CHECK 约束更为复杂的约束 可执
16、行复杂的SQL语句(if/while/case) 可引用其它表中的列,73,触发器,什么是触发器 触发器定义在特定的表上,与表相关 自动触发执行 不能直接调用 是一个事务(可回滚),74,触发器,触发器的类型 AFTER触发器 DELETE 触发器 INSERT 触发器 UPDATE 触发器 INSTEAD OF 触发器,75,触发器,Inserted 和Deleted表 触发器触发时: 系统自动在内存中创建deleted表或inserted表 只读,不允许修改;触发器执行完成后自动删除 Inserted 表 临时保存插入或更新后的记录行 可从Inserted表中检查插入的数据是否满足业务需求
17、。如不满足,向用户报告错误消息,并回滚插入操作 Deleted 表 临时保存了删除或更新前的记录行 可从Deleted表中检查被删除的数据是否满足业务需求。如不满足,向用户报告错误消息,并回滚插入操作,76,触发器,Inserted 和Deleted表,77,触发器,创建触发器 语法: CREATE TRIGGER trigger_name ON table_name WITH ENCRYPTION FOR|AFTER|INSTEAD OF DELETE, INSERT, UPDATE AS T-SQL语句 GO WITH ENCRYPTION表示加密触发器定义的SQL文本 DELETE, I
18、NSERT, UPDATE指定触发器的类型 AFTER:表示只有执行了指定的操作之后,触发器才被激活,执行触发器中的SQL 语句。 FOR:表示为AFTER 触发器 INSTEAD OF:指定触发器为INSTEAD OF 触发器,78,触发器,INSERT触发器,,,插入记录行,触发insert触发器。向inserted表中插入新行的副本,触发器检查inserted表中插入的新行数据,确定是否需要回滚或执行其他操作,,79,触发器,【例5-30】解决上述的银行取款问题:当向交易信息表(transInfo)中插入一条交易信息时,我们应自动更新对应帐户的余额,分析: 在交易信息表上创建INSERT
19、触发器 从inserted临时表中获取插入的数据行 根据交易类型(transType)字段的值是存入/支取, 增加/减少对应帐户的余额。,80,触发器,-------关键代码------ CREATE TRIGGER trig_transInfo ON transInfo FOR INSERT AS DECLARE type char(4),outMoney MONEY DECLARE myCardID char(10),balance MONEY SELECT type=transType,outMoney=transMoney, myCardID=cardID FROM insert
20、ed IF (type=支取) UPDATE bank SET currentMoney=currentMoney-outMoney WHERE cardID=myCardID ELSE UPDATE bank SET currentMoney=currentMoney+outMoney WHERE cardID=myCardID .. GO,从inserted表中获取交易类型、教员金额等,根据交易类型,减少或增加对应卡号的余额,,81,触发器,DELETE触发器,,,删除记录行,触发delete触发器向deleted表中插入被删除的副本,触发器检查deleted表中
21、被删除的数据,决定是否需要回滚或执行其他操作,,82,触发器,【例5-31】当删除交易信息表时,要求自动备份被删除的数据到表backupTable中,分析: 在交易信息表上创建DELETE触发器 被删除的数据可以从deleted表中获取,83,触发器,-------关键代码------ CREATE TRIGGER trig_delete_transInfo ON transInfo FOR DELETE AS print 开始备份数据,请稍后...... IF NOT EXISTS(SELECT * FROM sysobjects WHERE name=backupTable)
22、 SELECT * INTO backupTable FROM deleted ELSE INSERT INTO backupTable SELECT * FROM deleted print 备份数据成功,备份表中的数据为: SELECT * FROM backupTable GO,从deleted表中获取被删除的交易记录,84,触发器,UPDATE触发器,,,删除记录行,向deleted表中插入被删除的副本,检查deleted和inserted表中的数据,确定是否需要回滚或执行其他操作,,向inserted表中插入被添加的副本,,,更新记录行,85,触发器,【例5-32】跟踪用
23、户的交易,交易金额超过20000元,则取消交易,并给出错误提示,分析: 在bank表上创建UPDATE触发器 修改前的数据可以从deleted表中获取 修改后的数据可以从inserted表中获取,86,触发器,-------关键代码------ CREATE TRIGGER trig_update_bank ON bank FOR UPDATE AS DECLARE beforeMoney MONEY,afterMoney MONEY SELECT beforeMoney=currentMoney FROM deleted SELECT afterMoney=currentMoney
24、 FROM inserted IF ABS(afterMoney-beforeMoney)20000 BEGIN print 交易金额:+convert(varchar(8), ABS(afterMoney-beforeMoney)) RAISERROR (每笔交易不能超过2万元,交易失败,16,1) ROLLBACK TRANSACTION END GO,从deleted表中获取交易前的余额,从inserted表中获取交易后的余额,,交易金额是否2万,回滚事务,撤销交易,87,触发器,列级UPDATE触发器 UPDATE触发器除了跟踪数据的变化(修改)外
25、,还可以检查是否修改了某列的数据 使用UPDATE(列)函数检测是否修改了某列,88,触发器,【例5-33】交易日期一般由系统自动产生,默认为当前日期。为了安全起见,一般禁止修改,以防舞弊,分析: UPDATE(列名)函数可以检测是否修改了某列,89,触发器,-------关键代码------ CREATE TRIGGER trig_update_transInfo ON transInfo FOR UPDATE AS IF UPDATE(transDate) BEGIN print 交易失败..... RAISERROR (安全警告:交易日期不能修改, 由系统自
26、动产生,16,1) ROLLBACK TRANSACTION END GO,检查是否修改了交易日期列transDate,回滚事务,撤销交易,90,触发器,INSTEAD OF 触发器 INSTEAD OF 触发器表示并不执行其所定义的操作(INSERT、UPDATE、DELETE),而仅是执行触发器本身。 既可在表上定义INSTEAD OF 触发器,也可以在视图上定INSTEADOF 触发器,但对同一操作只能定义一个INSTEAD OF 触发器 INSTEAD OF 触发器的优点是使不能被更新的视图支持更新操作,91,触发器,【例5-34】假设有3 个表(Stu97、Stu98、S
27、tu99),分别存储97 级、98 级和99 级的学生信息,3个表具有相同的结构。而视图Stu_View 则包含了这3 个表的所有学生信息。现为视图Stu_View 创建INSTEAD OF 触发器Stu_Instead,实现能够直接向视图Stu_View 中插入数据。,1创建表Stu97、Stu98 和Stu99 CREATE TABLE Stu97 ( Sno char(5), Sname CHAR(8), Age INT ),2创建视图Stu_View CREATE VIEW Stu_View AS SELECT * FROM Stu97 UNION ALL SELECT * FROM
28、Stu98 UNION ALL SELECT * FROM Stu99,92,触发器,CREATE TRIGGER Stu_Instead ON Stu_View INSTEAD OF INSERT AS BEGIN DECLARE S_NO CHAR(2)/*该变量用于存放插入数据的学号Sno 的 前两位,以判断插入记录属于哪张表*/ SELECT S_NO= SUBSTRING(Sno,1,2) FROM INSERTED IF S_NO = 97---由学号判断该学生属于97 级学生,插入Stu97 表 BEGIN INSERT INTO Stu9
29、7 SELECT Sno, Sname, Age FROM INSERTED RETURN END IF S_NO = 98 ---由学号判断该学生属于98 级学生,插入Stu98 表 BEGIN INSERT INTO Stu98,93,触发器,SELECT Sno, Sname, Age FROM INSERTED RETURN END IF S_NO = 99 ---由学号判断该学生属于99级学生,插入Stu99 表 BEGIN INSERT INTO Stu99 SELECT Sno, Sname, Age FROM INSERTED
30、END ELSE BEGIN ROLLBACK TRANSACTION RAISERROR(插入记录的学号信息不正确,16,1) END END,94,触发器,小结 触发器是在对表进行插入、更新或删除操作时自动执行的存储过程,通常用于强制业务规则 触发器是一个特殊的事务单元,当出现错误时,可以执行ROLLBACK TRANSACTION回滚操作 触发器一般需要使用临时表:deleted和inserted,它们存放了被删除或插入的记录行副本 触发器类型: INSERT触发器 UPDATE触发器 DELETE触发器 INSTEAD OF 触发器,95,第五章 T-SQL,本章内容:,
31、T-SQL基础,1,,,96,游标,什么是游标 SELECT语句一次返回很多元组,但有时需要对每个元组进行不同的处理。游标是为了处理SELECT语句的结果集。 游标(Cursor)是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果。 游标有一个名字,用户可以通过游标逐一获取记录,并交付给主变量,交由主语言进一步处理。,97,游标,什么是游标 可以把游标看成一种指针,它既可指向当前位置,也可指向结果集中的任意位置 它允许用户对指定位置的数据进行处理,可以把结果集中的数据放在数组、应用程序或其它地方 游标的组成 游标结果集(Cursor Result Set) :定义游标的SELECT语句
32、返回的行的集合。 游标的位置(Cursor Position) 指向这个集合中某一行的指针。,98,游标,游标的优点 允许定位在结果集的特定行。 从结果集的当前位置检索一行或多行。 支持对结果集中当前位置的行进行数据修改 可在脚本、存储过程和触发器中使用游标访问结果集中的数据。,99,游标,游标的使用,100,游标,游标的创建 DECLARE cursor_name INSENSITIVE SCROLL CURSOR FOR select_statement FOR READ ONLY | UPDATE OF column_name_list INSENSITIVE 取出来的数据放到TE
33、MPDB中,对基本表的改动不会反映到游标中 SCROLL 可以做更多的操作:FIRST、LAST、NEXT、RELATIVE和ABSOLUTE READ ONLY 不修改游标指向的数据 UPDATE OF column_name_list 修改游标指向的数据,可以只修改某些列,也可以修改所有的列。,101,游标,【例5-35】创建一个游标,DECLARE student_cursor CURSOR FOR SELECT SNO,SName FROM Student WHERE SCore =500 ORDER BY SNO FOR READ ONLY,102,游标,游标的管理 打开游标。
34、 OPEN 关闭游标。 CLOSE ; CLOSE语句关闭已打开的游标,之后不能对游标进行读取等操作,但可以使用OPEN语句再次打开该游标。 释放游标。 DEALLOCATE 删除定义游标的数据结构,删除后不可再用,103,游标,利用游标取数 游标打开后,游标位置位于结果集的第一行前,此时可从结果集中提取(FETCH)行。SQL Server将沿着结果集一行或多行向下移动游标位置,不断提取结果集中的数据,并修改和保存游标当前的位置,直到结果集中的行全部被提取 语法 FETCH NEXT | PRIOR|FIRST|LAST|ABSOLUTE N|V|RELATIVE N|VFROM Curs
35、or_nameINTO variale,,,,,104,游标,利用游标取数 游标的移动方向 NEXT:取下一行数据 PRIOR:取前一行数据 FIRST:取第一行数据 LAST:取最后一行数据 ABSOLUTE:按绝对位置取数据 RELATIVE:按相对位置取数据 存放被提取的列数据的变量清单的个数、数据类型、顺序必须与定义该游标的select_statement中列出的列清单相匹配,105,游标,利用游标取数 与游标相关的两个全局变量 FETCH_STATUS 保存着最后FETCH语句执行后的状态信息,其值和含义如下: 0 :表示成功完成FETCH 语句。 -1:表示FETCH语句执行有错误
36、,或者当前游标位置已在结果集中的最后一行,结果集中不再有数据。 -2:提取的行不存在。 rowcount保存着自游标打开后的第一个FETCH语句,直到最近一次的FETCH语句为止,已从游标结果集中提取的行数。一旦结果集中所有行都被提取,那么rowcount的值就是该结果集的总行数。关闭游标时,该rowcount变量也被删除。,106,游标,【例5-36】使用student_cursor游标,将学生的学号和姓名打印出来,DECLARE vsno char(9) ,vsname varchar(20) OPEN student_cursor FETCH NEXT FROM student_curs
37、or INTO vsno, vsname WHILE FETCH_STATUS=0BEGIN PRINT 学号:+vsno + 姓名:+vsname FETCH NEXT FROM student_cursor INTO vsno, vsname ENDCLOSE student_cursor DEALLOCATE student_cursor,107,游标,使用游标修改数据 更新数据 通过在UPDATE语句中使用游标可以更新表或视图中的行。被更新的行依赖于游标位置的当前值 语法 UPDATE table_name|view_name SET column_name = new
38、_value ...n WHERE CURRENT OF cursor_name table_name| view_name:要更新的表名或视图名。必须是声明该游标的SELECT语句中的表名或视图名 column_name:要更新的列名。必须是声明游标的SELECT语句中UPDATE OF column_name_list的子集 WHERE CURRENT OF:使SQL Server只更新由指定游标的当前位置确定的行,108,游标,使用游标修改数据 更新数据 注意 使用UPDATE...CURRENT OF语句一次只能更新当前游标位置确定的那一行,OPEN语句将游标位置定位在结果
39、集第一行前,可以使用FETCH语句把游标位置定位在要被更新的数据行处 用UPDATE...WHERE CURRENT OF语句更新表中的行时,不会移动游标位置,被更新的行可以再次被修改,直到下一个FETCH语句的执行。 UPDATE...WHERE CURRENT OF语句可以更新多表视图或被连接的多表,但只能更新其中一个表的行,即所有被更新的列都来自同一个表。,109,游标,【例5-37】使用游标,将第三个学生转到软件学院,USE School GO DECLARE student_update SCROLL CURSOR FOR SELECT SNO,SDept FROM STUDENT
40、ORDER BY SNO FOR UPDATE OF SDept OPEN student_update FETCH ABSOLUTE 3 FROM student_update UPDATE Student SET SDept=软件学院 WHERE CURRENT OF student_update CLOSE student_update DEALLOCATE student_update,110,游标,使用游标修改数据 删除数据 通过在DELETE语句中使用游标来删除表或视图中的行。被删除的行依赖于游标的当前位置 语法 DELETE FROM table_name|view_name
41、 WHERE CURRENT OF cursor_name table_name|view_name:为要从其中删除行的表名或视图名。它必须是定义该游标的SELECT语句中的表名或视图名。 WHERE CURRENT OF:它使SQL Server只删除由指定游标的当前位置确定的行。,111,游标,使用游标修改数据 删除数据 注意 使用DELETE语句,一次只能删除当前游标位置确定的那一行。OPEN语句将游标位置定位在结果集第一行之前,可以用FETCH语句把游标位置定位在要被删除的行处 在DELETE语句中使用的游标必须声明为FOR UPDATE方式而且声明游标的SELECT语句中不能
42、含有连接操作或涉及多表视图,否则即使声明中指明了FOR UPDATE方式,也不能删除其中的行 对使用游标删除行的表,要求有一个唯一索引 使用DELETE语句,删除一行后将游标位置向前移动一行,112,第五章 T-SQL,本章内容:,T-SQL基础,1,,,113,事务,什么是事务 所谓事务(Transaction ),是指一个操作序列,这些操作序列要么都被执行,要么都不被执行,它是一个不可分割的工作单元 事务中任何一个语句执行时出错,系统都会返回到事务开始前的状态 事务是并发控制的基本单元,是数据库维护数据一致性的单位。在每个事务结束时,都能保持数据一致性。,114,事务,事务的特点 一致性:
43、它保证并发用户读取数据的一致性。 隔离性:事务内部的操作及使用的数据对并发的其他事务是隔离的。 可恢复性:DBMS利用事务日志能对事务进行自动恢复。 SQL Server对事务的管理包含三个方面: 事务控制语句:控制事务执行的语句。将一系列操作定义为一个工作单元来处理 锁机制:封锁正被一个事务修改的数据,防止其他用户访问到“不一致”的数据 事务日志:使事务具有可恢复性,115,事务,为了尽可能避免死锁的出现,应注意: 在所有的事务中都按同一顺序来访问各个表。尽可能利用存储过程来完成一个事务,以保证对各表的访问次序都是一致的。 事务应该尽量小且应尽快提交。 避免人工输入操作出现在事务中。 避免并
44、发地执行像INSERT、UPDATE、DELETE这类数据修改语句。,116,事务,事务控制语句 在SQL Server中,对事务的管理是通过事务控制语句和几个全局变量结合起来实现的,117,事务,事务控制语句 控制语句 BEGIN TRAN tran_name:标识一个用户定义的事务的开始。tran_name为事务的名字,标识一个事务开始。 COMMIT TRAN tran_name:表示提交事务中的一切操作,结束一个用户定义的事务。使得对数据库的改变生效。 ROLLBACK TRAN tran_name|save_name:回退一个事务到事务的开头或一个保存点。表示要撤消该事务已做的操作,
45、回滚到事务开始前或保存点前的状态。 SAVE TRAN save_name:在事务中设置一个保存点。它可以使一个事务内的部分操作回退。,118,事务,事务控制语句 两个可用于事务管理的全局变量 error:给出最近一次执行的出错语句引发的错误号,error为0表示未出错。 rowcount:给出受事务中已执行语句所影响的数据行数。,119,事务,事务控制语句 事务中不能包含的语句 CREATE DATABASE ALTER DATABASE BACKUP LOG DROP DATABASE RECONFIGURE RESTORE DATABASE RESTORE LOG UPDATE STAT
46、ISTICS,120,游标,【例5-38】使用事务向Course表中插入数据,USE School GO BEGIN TRAN tran_course INSERT INTO Course VALUES(C0009,微机原理,50,3) SAVE TRAN right_point INSERT INTO Course VALUES(C0010,云计算,30,2) GO INSERT INTO Course(CNO,Period,Credit) VALUES(C0011, 40,4) GO IF error0 ROLLBACK TRAN right_point GO COMMIT TRAN tran_course GO,
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 经营管理之道培训(经营管理的核心价值战略规划与决策制定)
- 班组凝聚力执行力培训(班组长怎样提升班组的凝聚力和执行力)
- 燃放烟花爆竹安全培训珍惜生命和健康安全燃放烟花爆竹
- 加强廉洁文化建设夯实廉政思想根基(开展廉洁文化建设具有深厚的文化基础)
- XX学校班主任期末工作总结教学成果自我管理班级风采
- XX地区文旅部门新年工作计划工作目标与愿景工作保障与监督
- 2025从常长二字读懂反腐倡廉(反腐败斗争永远在路上)
- XX地区粮食部门未来工作计划粮食安全保障产业发展人才队伍建设
- 在线贷款平台介绍如何选择在线贷款平台
- XX地区卫生部门工作述职汇报工作成果与亮点
- 燃放烟花爆竹安全教育安全燃放的注意事项
- 节后收心主题班会节后收心再出发踔厉奋发谱新篇
- 四篇:普通党员观看《反腐为了人民》之以案促改促治心得体会范文
- 纪委书记(党员)观看《反腐为了人民》心得体会三篇汇编
- 2025年春节集体廉政谈话会上的讲话范文