视图、存储过程与触发器

视图:是一个虚拟表,编译好的sql语句,随着表的改变而改变;使用视图会增加解析时间,降低效率。

存储过程:预先编译好的一批sql语句,会在服务器端注册并优化,效率高。

触发器:一个表数据更新后,通过触发器来修改与其关联的其它表,保持数据的一致性。(如A表中有B表的id,但没用外键约束,当B表删除后,要求A表相应字段设为0,可以用函数解决,但如果与B关联的表很多,就可以用到触发器)

给user表建立视图u:(mysql环境)

create view u as select * from  user

建立存储过程,将user中具有指定id的数据插入到person_name表中:

mysql>delimiter  $                 //因为mysql定界符(结束符)为分号,而存储过程中往往会有分号,这里将定界符改为$

接下来begin 创建存储过程p,输入命名为IN 是一个bigint类型的值;输出命名为OUT 是一个varchar类型的值

写插入数据的sql,end

create procedure p(IN userid bigint(20),OUT userName varchar(50))
begin
select * from user;
select user.userName into person_name form user where user.id =userid;//条件为user的id等于输入的userid
end
$

创建触发器语法如下:

 
 
   
   
   
   
  1. CREATE TRIGGER trigger_name trigger_time trigger_event 
  2. ON tbl_name FOR EACH ROW trigger_stmt 

■ trigger_name:标识触发器名称,用户自行指定;

■ trigger_time:标识触发时机,用before和after替换;

■ trigger_event:标识触发事件,用insert,update和delete替换;

■ tbl_name:标识建立触发器的表名,即在哪张表上建立触发器;

■ trigger_stmt:触发器程序体。可以用Begin End开始结束,中间可用IF else等做处理

create trigger t1 after insert on records for each row update Rweek set Rweek.Wincome=Rweek.Wincome+NEW.income,Rweek.Wexpend=Rweek.Wexpend+NEW.expend where Rweek.week=NEW.week;





你可能感兴趣的:(sql,视图,存储过程,触发器)