存储过程就是数据库中保存的一系列SQL命令的集合。
使用存储过程可以减轻数据库负担,提高执行性能、减轻网络负担、可防止对表的直接访问、可将数据库的处理黑匣子化。
1、定义存储过程:语法【create procedure 存储过程名
(参数的种类1 参数1 数据类型1[,参数的种类2 参数2 数据类型2....])
begin
处理内容
end】
如:mysql> delimiter //
mysql> create procedure sp_search_customer(in p_nam varchar(20))
-> begin
-> if p_nam is null or p_nam='' then
-> select * from customer;
-> else
-> select * from customer where nam like p_nam;
-> end if;
-> end
-> //
注:delimiter是改变分隔符[;],因为MySQL监视器中默认的分隔符是[;],存储过程本身含有[;],所以为了避免发生歧义,通常用[//]代替。
2、确认数据库中的存储过程:语法【show procedure status\G】
如:mysql> show procedure status\G
*************************** 1. row ***************************
Db: home
Name: sp_search_customer
Type: PROCEDURE
Definer: root@localhost
Modified: 2012-12-20 15:38:12
Created: 2012-12-20 15:38:12
Security_type: DEFINER
Comment:
character_set_client: utf8
collation_connection: utf8_general_ci
Database Collation: utf8_general_ci
1 row in set (0.01 sec)
3、确认存储过程的定义:语法【show create procedure 存储过程名\G】
如:mysql> show create procedure sp_search_customer\G
*************************** 1. row ***************************
Procedure: sp_search_customer
sql_mode: STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITU
TION
Create Procedure: CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_search_cus
tomer`(in p_nam varchar(20))
begin
if p_nam is null or p_nam='' then
select * from customer;
else
select * from customer where nam like p_nam;
end if;
end
character_set_client: utf8
collation_connection: utf8_general_ci
Database Collation: utf8_general_ci
1 row in set (0.01 sec)
4、执行存储过程:语法【call 存储过程名(参数,...)】
如:mysql> call sp_search_customer('san')\G
*************************** 1. row ***************************
mid: N0008
nam: san
birth: 1990-09-23
sex: 1
*************************** 2. row ***************************
mid: N0009
nam: san
birth: 1990-09-23
sex: 0
2 rows in set (0.00 sec)