[MySQL相关]什么是存储过程?
存储过程 Procedure 是一组为了完成特定功能的 SQL 语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行。存储过程理解的简单一点就是 “数据库中的程序”,可以在不需要外部程序(如 C,java 等)的情况下,让数据库自己解决复杂的、用一般 sql 不能实现的功能,它具备这些优点:
- 使用存储过程,相似的删,改,增等操作可以重复调用,方便且便于管理!
- 因为 SQL 语句已经预编绎过了,因此运行的速度比较快。
- 可以接受参数、输出参数、返回单个或多个结果集以及返回值。可以向程序返回错误原因。
- 运行比较稳定,不会有太多的错误。只要一次成功,以后都会按这个程序运行。
- 主要是在服务器上运行,减少对客户机的压力。
- 可包含程序流、逻辑以及对数据库的查询。同时可以实体封装和隐藏了数据逻辑。
- 可在单个存储过程中执行一系列 SQL 语句。
- 可从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。
一个完整的存储过程示例
delimiter $$ # 修改结束符为$$, 以免程序把begin...end之间的;作为结束符
drop procedure if exitsts proc_p1 $$ # 如果已经存在proc_p1就先删除
create procedure proc_p1(
in i1 int # 需要一个int类型的参数
)
begin # sql逻辑代码要放在begin...end之间
declare d1 int; # 声明一个d1变量
declare d2 int default 3; # 声明一个默认值为3的d2变量
set d1 = i1 + i2;
select *from man_to_women where nid > d1;
end $$
deliniter ; # 修改结束附为默认的分号,以免影响其他语句
# 调用存储过程
call proc_p1(2)