相关文章链接:
一周速学SQL Server(第六天)
一、触发器介绍
1.1、触发器
1)一种特殊的存储过程。触发器的调用通过事件进行触发,自动调用执行。
2)对表进行操作(插入、删除、更新)时,如果定义了对应的触发器,系统会自动调用。
1.2、分类
1)DDL触发器 create alter drop
2)DML触发器 insert update delete
DML触发器分为两种:
alter触发器 insert update delete:操作之后触发
instead of触发器insert update delete:不执行定义的操作,执行的是触发器本身。
二、instead与delete详解
1)Inserted(插入表)和deleted(删除表),是逻辑表也是虚表,系统在内存中创建的,不会存储到数据库中。
2)只能读取不能修改数据。结构与操作的表相同。触发器执行过程中存在并且可以访问。
对表的操作 |
Inserted表 |
deleted表 |
insert操作 |
存放插入的数据 |
无 |
update操作 |
存放更新后的数据 |
存放更新前的数据 |
delete操作 |
无 |
存放被删除的数据 |
触发器工作完成之后,这两张表会被自动删除。
3)inserted表存放的是插入或更新后的数据。deleted表存放更新前或删除的数据。
4)触发器是一个特殊的事务,可以进行一些检查,设置条件,如果不满足,可以回滚。
三、after触发器
1)after触发器:对表操作之后触发
2)after insert:在插入操作执行之后触发
基本语法:
create/alter trigger 触发器名称
on 表名
for/after insert
as
--T-SQL语句
go
3)after update
修改就是先删除原来的,再插入新的一条数据
四、after触发器之delete和instead insert
1)after delete触发器:删除后触发delete,可以查看删除的数据。
标识列的缺点:不能显示插入标识列。
2)instead of insert触发器
不执行定义操作,执行的是触发器本身。
五、游标介绍及分类
5.1、游标是什么?
1)对数据查询结果集的一种访问机制,允许用户对结果集进行逐条访问,每次访问的都是单条数据。
2)操作对象:结果集
3)可以理解为定义在特定结果集上的指针,可以控制这个指针来遍历数据集或指定特定的行。
5.2、游标的作用
1)定位到结果集中的某一行,对当前位置的数据进行读写。
2)游标适用于数据量小的情况。
5.3、游标分类
1)静态游标
无论对数据库做任何操作,结果集都不会变。
若想结果集与操作之后的数据一致,只能关闭游标,再重新打开。
2)动态游标
与静态相对,前后滚动,结果集就会获取所有的改变。提取时,行数据、顺序、成员都会发生改变。
对数据库的操作都可以通过动态游标可见。可使用api函数或T-SQL中的where current of 子句进行更新。
游标外部所做的更新直到提交时才可见。
3)只进游标
不支持滚动,只能从头读到尾。
对数据库所做的更改在提取时是可见的,但不能滚动。提取后所做的更改是不可见的。
4)键集驱动游标
5)总结:
静态游标在滚动时,检测不到表数据的变化,消耗的资源相对比较少;(多选择)
动态游标在滚动时,检测到表数据的变化,消耗的资源相对比较多;(性能相对较低)
只进游标不支持滚动,检测不到表数据的变化,消耗的资源相对比较少;(只读数据情况下选择)。
5.4、游标的生命周期
声明—>打开—>读取数据—>关闭游标—>释放游标
六、创建只进游标
语法:
declare 游标名 cursor local/global
for
SQL查询语句
open游标名
fetch next from 游标变量名 into 变量列表
while @@fetch_status = 0
begin
--处理
end
close 游标名
deallocate 游标名
工作中应用:游标放在存储过程中。