MySql存储过程

存储过程

存储过程是一堆sql语句的集。

Sql语句集可以表示为一个业务,(业务的变化比较小,并且业务完整,将一个小功能打包使用,可写成存储过程)

存储过程只是在创建时编译,再次运行时不会再编译,存储过程的速度非常快。

缺陷:存储过程能增加运行效率,但是会给数据库造成压力。尤其是在高并发的情况下,数据库压力倍增((可读性不高因为存储过程面向过程),维护方方便   

索引

每张sql数据表默认为聚集索引,(索引也是一个表)

索引可以加快数据库访问效率,但是降低了删除和修改速度(字段修改了,同时索引也需要修改,所以降低了速度)

如果使用多列索引,where条件中字段的顺序非常重要,需要满足最左前缀列,如果where条件的第一个条件不是建表时的第一个表参数时,会出错。

在以下几种情况下 ,mysql 在查询中即使有索引也不会去使用:

在多列索引,查询条件中用的不是最左边的列,那么此时是不会使用索引。

like查询时 % 出现在第一位也不会使用索引

条件中有 or 也不会使用索引

如果 mysql 估计使用全表扫描比使用索引快,它也不会使用索引。

红色关键字示例:

delimiter $ //前后申明将‘ ;’以免和sql的‘ ;’发生冲突 ,一般我们修改结束标识符为$符号,或则双斜杠\\

create procedure 存储过程名称([参数列表])

 BEGIN

    select 2+3 from dual;
    select * FROM t_car WHERE price>90000;
END

delimiter $

存储过程变量分为四种

1.全局变量 

2.用户变量 set @

3.会话变量

4.局部变量 declare

 

select into 书写方法

 

存储过程函数

存储过程函数传入输出  in(表示输入out 表示输出)  a1(表示参数) int(参入的参数类型),默认不写为输入in

-- create procedure cctv(in a1 int,in a2 int,out a3 int)


-- begin
--     set a3=a1+a2*2;
-- end

set @o:=null;   -- 设置用户变量@o
call cctv(19,2,@o); --传入参数19和2 ,传出参数@o
select @o; --输出得到结果

循环

loop语句

begin_label: loop

sql语句集..

end loop end_label

注意:loop退出循环通常伴随着一个LEAVE 语句  LEAVE 语句 跳出或者跳回到循环

leave语句语法:leave  label

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值