游标 |
概述:
游标是一种数据访问机制,允许用户访问单独的数据行,而不是对整个行集进行操作。用户可以单独处理每一行逐条收集信息并对数据逐行进行操作,可以降低系统开销和潜在的阻隔情况。用户可以用这些数据生成SQL代码并立即执行或输出
组成:
1.游标结果集 由定义游标的SELECT语句返回的行的集合
2.游标位置 指向这个结果集中的某一行的指针
特点:
1.游标返回一个完整的结果集,但允许程序设计语言只调用集合中的一行
2.允许定位在结果集的特定行
3.从结果及的当前位置检索一行或多行
4支持对结果集中当前位置的行进行数据修改
5.可以为其他用户对显示在结果集中的数据库数据所做的更改提供不同级别的可见性支持
6.提供脚本、存储过程和触发器中使用的访问结果集中数据的T-SQL语句
游标的声明:
DECLARE cursor_name [INSENSITIVE][SCROLL]CURSOR
FOR select_statement
[FOR{READ ONLY|UPDATE[OF column_name[,...n]]}]
SCROLL 指定游标位置定义过程:
打开游标:
OPEN {{[GLOBAL]cursor_name}|cursor_variable_name}
检索游标:
FETCH
[[NEXT|PRIOR|FIRST|LAST|ABSOLUTE{n|@nvar}|RELATIVE{n|@nvar}]
FROM]
{{[GLOBAL]cursor_name}|@cursor_variable_name}
[INTO@variable_name[,...n]]
关闭游标:
CLOSE {{[GLOBAL]cursor_name}|cursor_variable_name}
释放游标:
DEALLOCATE {{[GLOBAL]cursor_name}|cursor_variable_name}
判断游标提取状态:
使用@@FETCH—STATUS变量获取提取状态
取值:
1.返回0,FETCH语句成功
2.返回-1,语句失败或者行不在结果集中
3.返回-2,提取不存在
事务 |
BEGIN TRANSACTION
COMMIT TRANSACTION
ROLLBACK TRANSACTION
SAVE TRANSACTION
开始事务
提交事务,结束事务
回滚事务(出现错误)
保存事务
事务的存在包含有以下两个目的:
为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法;
当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相干扰。
SQL Server 2008事务模式
1.自动提交事务 每条单独的语句都是一个事务
2.显式事务 每个事务均以Begin Transaction语句显示开始,以 Commit或Rollback语句显式结束
3.隐式事务 在前一个事务完成时新事务隐式启动,但每个事务仍以Commit或Rollback语句显式完成
4.批处理级事务
只能用于多个活动结果集,在MARS会话中启动的T-SQL显式或隐式事务变为批处理级事务。当批处理完成时没有提交或回滚的批处理级事务自动由SQL Server进行回滚
锁 |
封锁:
就是一个事务可向系统提出请求,对被操作的数据加锁。其他事务必须等到此事务解锁之后才能访问该数据。从而,在多个用户并发访问数据库时,确保不相互干扰。
可锁定的单位:
行,页,表,盘区和数据库
锁的类型:
共 享 S 锁 | 用于读操作,多个事务可封锁一个共享单位的数据;任何事务都不能修改加S锁的数据;通常加S锁的数据被读取完毕,S锁就立即被释放。 |
---|---|
独占 X锁 | 用于写操作,仅允许一个事务封锁此共享数据;其他任何事务必须等到X锁被释放才能对该数据进行访问;X锁一直到事务结束才能被释放。 |
更新U锁 | 用来预定要对此页施加X锁,它允许其他事务读,但是不允许再施加U锁或X锁;当被读取数据页将要被更新时,则升级为X锁;U锁一直到事务结束时才能被释放。 |
死锁:
是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,他们将都无法推进下去,此时称系统处于死锁状态或系统产生了死锁
必要条件:
1.互斥条件:一个资源每次只能被一个进程使用
2.请求与保持条件
3.不剥夺条件
4.循环等待条件
只要上述条件之一不满足,就不会发生死锁
死锁的解除和防御:
1.按同意顺序访问对象
2.避免事务中的用户交互
3.保持事务简短并在一个批处理中
4。使用低隔离级别
5.使用绑定连接