SQL高级--储存过程和触发器

储存过程

什么是存储过程

存储过程:是一组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个同时都在一个触发器中,通常情况下还是写成单独的


你可能感兴趣的:(sql学习)