10.1游标 (课件)-《网站数据库应用技术-SQL Server》同步教学(电子工业版)
2024-07-11
|
18页
|
23人阅读
|
1人下载
普通
内容正文:
游标、事务和锁
第十章
01
游标
游标
01
游标概述
游标通过以下方式扩展结果集的处理。
(1)允许定位在结果集的特定行。
(2)从结果集的当前位置检索-行或多行。
(3)支持对结果集中当前位置的行进行数据修改。
在SQL Server 2019中使用游标的一般步骤如下。
(1)声明游标(DECLARE CURSOR)。
(2)打开游标(OPEN CURSOR)。
(3)提取游标(FETCH CURSOR)。
(4)根据需要,对游标中当前位置的行执行修改操作(更新或删除)。
(5)关闭游标(CLOSE CURSOR)。
(6)释放游标(DEALLOCATE CURSOR)。
游标
01
游标概述
(1)DECLARE CURSOR。声明游标,定义T-SQL服务器游标的属性,如游标的滚动行为和用于生成游标所操作的结果集的查询,其基本语句格式如下:
参数含义如下:
● cursor_name:所定义的T-SQL服务器游标名称;
● SELECT statement:定义游标结果集的标准SELECT语句。
游标
01
游标概述
(2)OPEN CURSOR。打开T-SQL服务器游标,然后通过执行在 DECLARE CURSOR或SET cursor variable语句中指定的T-SQL语句来填充游标,其基本语句格式如下:
游标
01
游标概述
(3)FETCH CURSOR。提取游标,从T-SQL服务器游标中检索特定的一行,其基本语句格式如下:
参数含义如下:
● NEXT:返回紧跟当前行之后的结果行。如果FETCH NEXT为对游标的第一次提取操作,则运行结果集中的第一行。
游标
01
游标概述
● PRIOR:返回紧临当前行前面的结果行。如果FETCH PRIOR为对游标的第一次提取操作,则没有行返回并且游标置于第一行之前。
● FIRST:返回游标中的第一行并将其作为当前行。
● LAST:返回游标中的最后一行并将其作为当前行。
● ABSOLUTE n:如果n为正数,返回从游标头开始的第n行并将返回的行变成新的当前行。如果n为负数,返回游标尾之前的第n行并将返回的行变成新的当前行。如果 n 为0,则没有行返回。
● RELATIVEn:返回当前行之前或之后的第 n 行并将返回的行变成新的当前行。
● cursor name:要从中提取的游标的名称。
● INTO @variable_name[,…n]:允许将提取操作的列数据放到局部变量中。列表中的各个变量从左到右与游标结果集中的相应列相关联。各变量的数据类型必须与相应的结果列的数据类型匹配。变量的数目必须与游标选择列表中的列的数目一致。
游标
01
游标概述
(4)CLOSE CURSOR:关闭游标,通过释放当前结果集并且解除定位游标的行上的游标锁定。关闭游标后,游标可以重新打开,但不允许提取和定位更新,其基本语句格式如下:
(5)DEALLOCATE CURSOR:删除游标,其基本语句格式如下:
02
事务
事务
02
事务概述
事务是SQL Server 中的单个逻辑工作单元,也是一个操作序列,它包含了一组数据库操作命令,所有的命令作为一个整体一起向系统提交或撤销,如果某一事务成功,则在该事务中进行的所有数据修改均会提交,成为数据库中的永久组成部分。如果事务遇到错误且必须取消或回滚,则所有数据修改均被清除。因此,事务是一个不可分割的工作逻辑单元,在SQL Server 中应用事务来保证数据库的一致性和可恢复性。
一个逻辑工作单元必须具备以下四种属性,也称为ACID(每种属性英文名称的首字母)属性。
事务
02
事务概述
(1)原子性。一个事务必须作为SQL Server 工作的原子单位,要么全部执行,要么全部取消。
(2)一致性。当事务完成后,所有数据必须处于一致性(但不相同)状态,即事务所修改的数据必须遵循数据库中各种约束要求,保持数据的完整性;在事务完成时,SQL Server所有内部数据结构(如索引与数据的连接等)必须得到更新。
事务
02
事务概述
(3)隔离性。一个事务所做的修改必须能够与其他事务所做的修改隔离开来,即在并发处理过程中,一个事务所看到的数据状态必须为另一个事务处理前或处理后的数据,而不能为在正被其他事务所修改的数据。事务的隔离性通过锁来实现,在本章的后续内容中还将对隔离进行详细说明。
(4)持久性。事务完成后,它对数据库所做的修改将被永久保持。事务日志能够保证事务的永久性,SQL Server在每次启动时,它会自动修复数据库,并根据事务日志回滚所有数据库中未完成的事务。
事务
02
自动提交事务
自动提交模式是SQL Server数据库引擎的默认事务管理模式。每个T-SQL 语句在完成时,都被提交或回滚。如果一个语句成功完成了,则提交该语句;如果遇到错误,则国滚该语句。
在自动提交模式下,当遇到编译错误时,数据库引擎回滚整个批处理而不仅仅回滚一个SQL语句。编译错误会阻止数据库引擎生成执行计划,这样批处理中的任何语句都不会执行。因此,产生编译错误时,回滚了产生错误的语句之前的所有语句,并且该错误阻止了批处理中的所有语句的执行。
事务
02
显式事务
1.定义和提交事务
通常,在程序中用BEGIN TRANSACTION命令来标识一个事务的启动开始,用COMMIT TRANSACTION命令标识事务结束。这两个命令之间的所有语句被视为一体,即事务。只有执行到COMMT TRANSACTION 命令时,事务中对数据库的更新操作才算确认,这两个命令的基本语句格式如下:
事务
02
显式事务
2.回滚事务
事务回滚是指当事务中的某条语句执行失败时,将对数据库的操作恢复到事务执行前或某个指定位置。事务回滚使用ROLLBACK TRANSACTION命令,其基本语句格式如下:
事务
02
显式事务
2.回滚事务
如果要让事务回滚到指定位置,则需要在事务中设定事务保存点。所谓保存点,是指定其所在位置之前的事务语句不能回滚,即此语句前面的操作被视为有效,其基本语句格式加下:
事务
02
隐式事务
当连接以隐性事务模式进行操作时,SQL Server 数据库引擎实例将在提交或回滚当前事务后自动启动新事务。不需要描述事务的开始,只需要提交或回滚每个事务,隐性事务模式将生成连续的事务链。
将隐性事务模式设置为打开之后,当数据库引擎实例首次执行某些 T-SQL语句时,都会自动启动一个事务。首次执行时,自动启动事务的T-SQL语句如表10-2所示。
事务
02
隐式事务
在发出 COMMIT 语句或ROLLBACK语句之前,该事务将一直保持有效。在第一个事务被提交或回滚之后,下次连接执行以上任何语句时,数据库引擎实例都将自动启动一个新事务。该实例将不断地生成隐性事务链,直到隐性事务模式关闭为止。
隐性事务模式既可以使用T-SQL 的SET语句来设置,也可以通过数据库API函数和方法来设置。
$$
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。