《高性能MySQL》笔记(2)

来源:互联网 发布:ps制作淘宝店铺招牌 编辑:程序博客网 时间:2024/04/27 21:39
mysql存储代码的四种形式:
1.触发器
2.存储过程
3.函数
4.在定时任务中存放代码(5.1开始),即事件

存储过程和存储函数可以接收参数然后返回值,但是触发器和事件却不行


mysql存储过程:




存储过程:
是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它
存储过程是从mysql5.0开始增加的新功能,大大提高数据库的处理速度,同时也可以提高数据库编程的灵活性。
过程:封装起来的若干条语句,调用时这些封装体执行。把此过程存储到数据库中即存储过程
函数:是有一个返回值的“过程”
过程:没有返回值的函数


存储过程的优点:
1.存储过程增强了SQL语言的功能和灵活性(可以SQL编程,能使用变量,表达式、控制结构体)
2.存储过程能实现较快的执行速度。(存储过程要比批处理的执行速度快很多,因为存储过程是预编译的。在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的transaction_sql语句在每次运行时都要进行编译和优化,速度相对慢一些)
3.存储过程能够减少网络流量,针对一个数据库对象的操作,如果这一操作所涉及的transaction_sql语句被组织存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而大大增加了网络流量并降低了网络负载。
4.存储过程可被作为一种安全机制来充分利用。系统管理员通过执行某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。
5.存储过程允许标准组件式编程。存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句,而且数据库专业人员可以随时对存储过程进行修改,对应用程序源码毫无影响。



存储过程的基本创建过程:
delimiter //           --这里是创建存储过程的调用结束标志和开始标志
create procedure proc1(参数)    --创建了一个名字为proc1的存储过程,不管有没有参数,都需要加上括号
begin --存储过程开始
select * from user                  --要存储的sql语句
end                             --存储结束
//                              --约定的结束标志



存储过程的调用执行过程
call proc1(参数)//(创建存储过程的时候的约定的结束符号)



存储过程参数:
in 参数名字  参数类型       --输入参数的形式








显示数据库中所有的存储过程:
show procedure status;
显示某个存储过程的详细信息(procbname为存储过程的名称)
show create procedure procbname;
删除存储过程
drop procedure if exists procbname;


在黑窗口设置输出接口为指定的字符集:(黑窗口的默认字符集为gbk,无法更改)
set character_set_results=gbk/utf8;





存储过程的输入和输出:



输入:(获取一条id等于p的记录)
create procedure proc1(in p int)
select * from user where id=p;(在这里可以用begin和end开始和结束,但是要改变结束符号)



输出:(找出user表中最大的id,并将其赋给p)
create procedure proc2(out p int)
select max(id) into p from user;
执行:
call proc2(@p);     --输入的必须是变量,否则无法成功,也就是一定要带上@符号,查看变量值也是一样

select @p;



输入输出:(将p当做输入参数。判断其值,然后建立变量赋值,然后打印变量)

delimiter //
create procedure proc6(inout p int)
begin
if p=1 then
set @pg=100;
else
set @pg=200;
end if;
select @pg;
end
//

执行:                 --打印的时,要先给变量赋值
set @p=1//
call proc6(@p)//




0 0
原创粉丝点击