储存程序 (Stored Procedure),又可称预储程序或者存储过程,是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象,它可以视为数据库中的一种函数或子程序。
优点 预存程序具有下列的好处:
预存程序可封装,并隐藏复杂的商业逻辑。
预存程序可以回传值,并可以接受参数。
预存程序无法使用 SELECT 指令来运行,因为它是子程序,与查看表,数据表或用户定义函数不同。
预存程序可以用在数据检验,强制实行商业逻辑等。
缺点
预存程序,往往定制化于特定的数据库上,因为支持的编程语言不同。当切换到其他厂商的数据库系统时,需要重写原有的预存程序。
预存程序的性能调校与撰写,受限于各种数据库系统。
一,存储语法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| CREATE [DEFINER = { user | CURRENT_USER }] PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_body
CREATE [DEFINER = { user | CURRENT_USER }] FUNCTION sp_name ([func_parameter[,...]]) RETURNS type [characteristic ...] routine_body
proc_parameter: [ IN | OUT | INOUT ] param_name type
func_parameter: param_name type
type: Any valid MySQL data type
characteristic: COMMENT 'string' | LANGUAGE SQL | [NOT] DETERMINISTIC | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | SQL SECURITY { DEFINER | INVOKER }
routine_body: Valid SQL routine statement
|
当然也可以参见官方文档地址:https://dev.mysql.com/doc/refman/5.7/en/create-procedure.html
二,存储示例
带传入参数的简单插入:
1 2 3 4 5 6 7 8 9
| CREATE DEFINER=`root`@`localhost` PROCEDURE `insertUserInfo`(IN userId int, in userName varchar (20), in createdBy varchar(20)) BEGIN
INSERT INTO USER_INFO (USER_ID, USERNAME, CREATED_BY, CREATED_DATE) VALUES (userId, userName, createdBy, NOW()); END
|
带传入参数的简单查询:
1 2 3 4 5 6
| CREATE DEFINER=`root`@`localhost` PROCEDURE `findUserInfoById`(IN userId int) BEGIN
select * from USER_INFO where USER_ID = userId ;
END
|
Author:
Darren Du
License:
Copyright (c) 2019 MIT LICENSE