【SQL】- 基础知识梳理(6) – 游标

发布时间:2019-05-06  栏目:NoSQL  评论:0 Comments

游标展开后,服务器会专程为游标分配一定的内部存款和储蓄器空间存放游标操作的数额结果集,同时利用游标也会对有些数据举行约束。所以游标一旦用过,应立刻关门,防止服务器能源浪费。

结果集,结果集正是select查询之后回来的有所行数据的汇合。

  • 是拍卖多少的1种格局。
  • 它能够一定到结果聚集的某一行,对数码进行读写。
  • 也足以活动游标定位到您必要的行中实行数量操作。
  • 是面向集合的数据库管理体系和面向行的顺序设计之间的桥梁
DECLARE cursor_name CURSOR [ LOCAL |GLOBAL ] 
     [ FORWARD_ONLY | SCROLL ] 
     [ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ] 
     [ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ] 
     [ TYPE_WARNING ] 
     FOR select_statement 
     [ FOR UPDATE [ OF column_name [ ,...n ] ] ]

什么定义游标

实战创制游标

准备表数据

图片 1

cursor_name:游标名称。
Local:成效域为局部,只在概念它的批管理,存款和储蓄进度或触发器中有效。
Global:效用域为大局,由一连实施的其余存款和储蓄进程或批管理中,都得以引用该游标。
[Local | Global]:默认为local。
Forward_Only:钦定游标智能从第一行滚到最后一行。 Fetch
Next是有一无二补助的领到选项。如果在内定Forward_Only时不钦命Static、KeySet、Dynamic关键字,默感到Dynamic游标。假若Forward_Only和Scroll未有点名,Static、KeySet、Dynamic游标默认为Scroll,法斯特_Forward默认为Forward_Only
Static:静态游标
KeySet:键集游标
Dynamic:动态游标,不援助Absolute提取选项
Fast_Forward:钦赐启用了品质优化的Forward_Only、Read_Only游标。
Read_Only:意味着证明的游标只可以读取数据,游标无法做其它更新操作
Scroll_Locks:将读入游标的享有数据开始展览锁定,防止其余程序开展改换,以有限支撑更新的断然成功
Optimistic:是绝对相比较好的3个抉择,OPTIMISTIC不锁定任何数据,当要求在游标中更新数据时,假如底层表数据更新,则游标内数据更新不成功,假设,底层表数据未更新,则游标内表数据足以革新。
Type_Warning:钦点将游标从所请求的档期的顺序隐式转变为另一种档期的顺序时向客户端发送警告信息。
For Update[of column_name ,….] :定义游标中可更新的列。

实行结果

选拔游标时注意事项:

假定能不要游标,尽量不要使用游标

图片 2

全力以赴不要在大气数码上定义游标
尽恐怕不要选拔游标上立异数据
尽或然不要采取insensitive, static和keyset这几个参数定义游标
就算能够,尽量利用FAST_FO智跑WAXC60D关键字定义游标
假使只对数据开始展览读取,当读取时只用到FETCH
NEXT选项,则最佳利用FO福睿斯WA途观D_ONLY参数

游标变量协理两种方式赋值,定义时赋值和先定义后赋值,定义游标变量像定义别的一些变量同样,在游标前加”@”,注意,如若定义全局的游标,只帮忙定义时一向赋值,并且不可能在游标名称前边加“@”,三种概念格局如下:
–定义后平素赋值
DECLARE test_Cursor CURSOR FOR
SELECT * FROM TABLE1
–先定义后赋值
DECLARE @test_Cursor2 CURSOR
SET @test_Cursor2=CURSOR FOR
SELECT * FROM TABLE2

创制游标

 

–定义后直接赋值
DECLARE test_Cursor CURSOR LOCAL FOR
SELECT * FROM TABLE1
DECLARE test_Cursor2 CURSOR GLOBAL FOR
SELECT * FROM TABLE2
–用GO甘休下边功能域
GO
–张开游标
OPEN test_Cursor
OPEN test_Cursor2
大局游标在批管理达成后照旧有效
有些游标在批管理终结后被隐式释放,不能够再其余批管理中引用
  假诺不点名游标功能域,暗中认可功用域为GLOBAL
 注意,当全局游标和部分游标变量重名时,暗中同意会张开局地变量游标

游标的定义

Fetch [ [Next|prior|Frist|Last|Absoute n|Relative n ]
from
[Global] cursor_name
into @variable_name[,….]]
参数表明:
Frist:结果集的第2行
Prior:当前岗位的上一行
Next:当前地方的下壹行
Last:最终一行
Absoute n:从游标的率先行开头数,第n行。
Relative n:从相对当前职责数,第n行。(n为负数向前数,不然向后)
Into @variable_name[,…] :
将提取到的数码存放到变量variable_name中。
只顾:    对于未内定SCROLL选项的游标来说,只协助NEXT取值.

注释:

游标的归类

@@fetch_status是MicroSoft SQL SE凯雷德VE卡宴的八个全局变量
其值有以下三种,分别代表二种差异含义[回去类型integer]
0 FETCH 语句成功
-1 FETCH 语句失利或此行不在结果集中
-2 被提取的行不设有

SQL Server支持的API服务器游标分为4种:
静态游标( STATIC
)意味着,当游标被确马上,将会创设FO酷路泽前面包车型大巴SELECT语句所包括数据集的别本存入tempdb数据库中,任何对于底层表内数据的改动不会潜移默化到游标的内容。
动态游标( DYNAMIC
)是和STATIC完全相反的选项,当底层数据库改换时,游标的内容也随即获得反映,在下3次fetch中,数据内容会随着变动。
键集驱动游标( KEYSET
)能够驾驭为介于STATIC和DYNAMIC的折中方案。将游标所在结果集的独占鳌头能明确每壹行的主键存入tempdb,当结果聚集任何行改换只怕去除时,@@FETCH_STATUS会为-2,KEYSET不可能探测新投入的数量。
只进游标   
能够清楚成不协助滚动,只协理原原本本顺序提取数额,数据库实施增加和删除改,在领取时是可知的,但出于该游标只好进无法向后滚动,所以在行提取后对行做增加和删除改是不可知的。
( FAST_FO福特ExplorerWA宝马X3D
能够清楚为FORubiconWA昂科威D_ONLY的优化版本.FOEscortWA陆风X8D_ONLY实行的是静态安排,而FAST_FORWACR-VD是依赖事态打开分选采纳动态布署还是静态安插,大多数状态下FAST_FORWARD要比FORWARD_ONLY品质略好。

领到游标语法 

--声明游标
declare test_Cursortable3 CURSOR FOR
SELECT id,NAME FROM TABLE3
--打开游标
OPEN test_Cursortable3
--声明游标提取变量所要存放的变量
declare @id int,@name varchar(20)
--定位游标到哪一行
fetch next from test_Cursortable3 into @id,@name    --into的变量数量必须需与游标查询结果的列数相同
--fetch FIRST from test_Cursortable3 into @id,@name
while @@FETCH_STATUS=0  --提取成功,进行下一条数据的提取操作
begin
    if @id=2
    begin
    Update TABLE3 Set sex='0' Where Current of test_Cursortable3 --更新当前行
    end
    if  @id=10
    begin
    delete TABLE3 where current  of test_Cursortable3    --删除当前行
    end
fetch next from test_Cursortable3 into @id,@name    --移动游标
end
--关闭游标
close    test_Cursortable3
--释放游标
deallocate test_Cursortable3

游标(Cursor):

游标的语法

留下评论

网站地图xml地图