存储过程是一组复合sql语句,不直接返回一个结果,但可以用来完成一组逻辑处理或是生成一个结果集并传递给客户。
1.定义语法
CREATE PROCEDURE sp_name ([ proc_parameter[,...]]) [ characteristic ...] routine_body proc_parameter: [ IN | OUT | INOUT ] param_name type type: Any valid MySQL data type characteristic: LANGUAGE SQL | [NOT] DETERMINISTIC | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | SQL SECURITY { DEFINER | INVOKER } | COMMENT 'string' routine_body: Valid SQL procedure statement or statements
2.修改存储过程:在不重建存储过程的前提下,只能够修改存储过程的characteristic属性。若需要改变存储过程包含的语句和逻辑过程,则只能够drop procedure后重新create。
ALTER PROCEDURE proc_name [characteristic …] characteristic: COMMENT 'string' | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | SQL SECURITY { DEFINER | INVOKER }
3.删除存储过程
DROP PROCEDURE [IF EXISTS] proc_name
4.查看存储过程:显示MySQL中所有数据库中定义的存储过程信息(可直接查询mysql.proc表中type=’PROCEDURE’的记录)
SHOW PROCEDURE STATUS
5.调用存储过程
CALL proc_name([parameter[,…]]);
存储过程不返回任何值,因此不能够用在表达式中,只能够通过CALL语句来调用。因为存储过程来运算并实现某种效果或动作而无需返回一个值。如果需要使用存储函数运算过程中产生的结果,可以使用OUT或INOUT标注对应的变量。
6.用例
mysql> delimiter // mysql> CREATE PROCEDURE simpleproc (OUT param1 INT) -> BEGIN -> SELECT COUNT(*) INTO param1 FROM t; -> END -> // Query OK, 0 rows affected (0.00 sec) mysql> delimiter ; mysql> CALL simpleproc(@a); Query OK, 0 rows affected (0.00 sec) mysql> SELECT @a; +------+ | @a | +------+ | 3 | +------+ 1 row in set (0.00 sec)