存储过程(Stoage Procedure)和MySQL中的触发器(trigger)

一.存储过程(Stoage Procedure)  declare

存储过程是一组为了完成特定功能的SQL语句集, 存储在数据库中,用户通过指定存储过程名字并给定参数(如果该存储过程带有参数)来调用执行它

优点:---增强SQL 语句的功能和灵活性-----标准组件式编程-----较快的执行速度-----减少网络流量-----作为一种安全机制来充分利用

变量赋值 (语法)

set   变量名  =  变量值;

用户变量    (用户变量一般以@开头)

参数

存储过程根据需要可能会有输入、输出、输入输出参数,如果有多个参数用“,”分隔开。

MySQL存储过程的参数用在存储过程的定义,共有三种参数类型:in、out 、inout:

in参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值

out;该值可在存储过程内部被改变,并可返回

inout:调用时指定,并且可被改变和返回

定义存储过程

delimiter $$//定义结束符号
creat  procedure  存储过程名称(参数类型 参数  参数数据类型)//自定义函数
begin
          if(num<100) then                              
          update money set num=100 where name='zixia';
          end if;
end $$//结束

实例:

delimiter //
create proceduce  proqian(inout m int)
begin
if(@qian>100)then
set @qian=@qian-50;
update bank set money=@qian where name='孙尚香';
else 
set @qian=@qian+50;
update bank set money=@qian where name='孙尚香';
end if;
end//
//查看当前存储过程命令
show procedure status;
//查看函数命令:
show function status;//函数
//查看存储过程或函数的创建代码
show create procedure pro_name;
show create function func_name;

二.MySQL中的触发器

delimiter//
create trigger 触发器名称  before |after 触发事件(insert|delete|update)
on 触发器关联的表名称 for each  row
begin
触发器执行的代码
end 
delimiter//

触发器实例:

delimiter//
create trigger stu_trigger after insert
on student for each row 
begin 
  insert into log(logname,logtime)values (new.name,now());
end//

new --指的是触发触发器的对象

after--在此操作执行之后执行触发器逻辑代码

before--在此操作执行之前执行触发器逻辑代码

new---指的是触发触发器对象改变后的对象值

old---指的是触发触发器对象改变前的对象值

查看触发器(在所有数据库中)

show  triggers;/*!触发器*/

 

MySQL的查询优化方法:

1.优化查询SQL语句。

如果连接查询和子查询都可以查询到结果,则优先考虑连接查询。     因为子查询时会创建临时表,临时表的内容是存储子查询结果的,查询完毕后,还要撤销临时表。

2.在频繁使用的列上创建索引(index)。

3.拆表。

如果一个表中的字段很多,应该将不经常使用的字段存储与另一张表中,原表只保留常用查询字段。

4.增加冗余字段。

将需要经常使用到的信息以冗余字段的方式添加到表中,省去了连接查询的耗时。

例:如果经常要查询员工姓名与其对应部门名称,则可将部门名称作为员工表emp的一个冗余字段,省去了emp表与dept表的链接查询。

5.增加中间表

建立一个中间表,将多张表的查询字段放于此中间表中。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值