储存过程
什么是存储过程
存储过程:是一组SQL命令集合,经过预编译存放在系统中
在日常的数据库操作中,会有大量的T-SQL批处理、游标,如果每次都要去重写或者打开脚本来执行会相当麻烦,数据库可以将我们编写的T-SQL批处理保存在一个处理过程中,就像java程序里的方法,可以重复的被调用,这个被保存的处理过程在数据库中叫存储过程,和程序中的方法一样,同样可以根据需要设置参数、和返回值。
存储过程分类
存储过程可以分为“系统存储过程”和“用户存储过程”
系统存储过程:一般以SP_开头,用户不可以编辑修改,只能调用
用户存储过程:用户编写的处理数据的存储过程
存储过程的创建和使用
下面是存储过程的基本结构
无参数
create procedure proc1 --创建一个存储过程
as
begin
--在存储过程中处理SQL
select * from bank
end
有参数
create procedure proc2
@mobile varchar(50),@sendMsg varchar(50)
as
begin
print @mobile
end
输出参数
create procedure proc2
@mobile varchar(50) output,@sendMsg varchar(50) output
as
begin
print @mobile
end
注意要点:
1.存储过程的关键子是procedure,创建时可以简写成proc,
2.存储过程的参数是在as关键字之前,as之后的是局部变量,2种变量在存储过程中都可以使用,但是命名时不可以冲突
3.存储过程参数可以是输出参数,可以返回过程处理的值
4.支持T-SQL,游标、和存储过程的嵌套
什么是触发器?
触发器是一种特殊的存储过程,它不是由用户主动发起调用的,而是当发生某一事件而触发,由系统自动调用,比如当用户在数据库中新增一条商品采购记录,我们希望同时在库存中做登记,而库存登记不是人工去录入,是在发生商品采购这一事件时发生,由系统自动完成录入,这个工作就可以交给一个特殊的存储过程来完成,这个存储过程就是触发器。
触发器的工作机制
触发器是建在表上的,当这个表发生新增、修改、删除操作时,如果这个表上有触发器,就会被自动调用,在这个事件的过程中,系统会产生一个临时表, 这个临时表只有一行记录
当执行新增操作时,临时表的名字叫inserted
当执行删除操作时,临时表的名字叫deleted
当执行修改操作时,会同时产生2个临时表,一个是inserted,存放的是新的数据,一个是deleted,存的是旧的数据
当需要触发器连带操作登记库存时就可以从inserted表或者deleted表中获得变量,更新到库存表中数据
触发器的创建
触发器的基本语法规则
create trigger 触发器名称 --触发器名称
on 表名 --建在那个表上
for insert|update|delete --是插入事件处理还是修改事件处理还是删除事件处理
as --以下是触发器基本格式
begin
end
触发器的事件可以是单独的,也可以3个同时都在一个触发器中,通常情况下还是写成单独的