帮助中心/最新通知

质量为本、客户为根、勇于拼搏、务实创新

< 返回文章列表

【服务器相关】详解MySQL中的存储过程和函数

发表时间:2025-06-16 03:46:00 小编:主机乐-Yutio

储存过程和函数就是数据器将一些处理封装起来,调用

区别

调用储存过程只需要使用CALL,然后指定储存名称和参数,参数可以是IN、OUT和INOUT

调用储存函数只需要使用SELECT,指定名称和参数,储存函数必须有返回值,参数只能是IN

优点

  • 良好的封装性
  • 应用程序和SQL逻辑分离
  • 让SQL也具有处理能力
  • 减少网络交互
  • 能够提高系统性能
  • 降低数据出错的概率,保证数据的一致性和完整性
  • 保证数据的安全性

创建储存函数和过程

储存过程

create procedure sp_name ([proc_parameter[,…]]) [characteristic …] routine_body

create procedure 创建储存过程关键字

sp_name 储存过程名称

proc_parameter 参数

characteristic 约束

routine_body 执行体,使用BEGIN— END包括

proc_parameter

IN | OUT | INOUT param_name type

characteristic

language SQL 执行体

[not] deterministic 得出的结果是否确定,不带NOT 出入相同,默认带NOT

constains SQL 不包含读写SQL , no sql 不包含sql语句, reads sql data 读数据的sql, modifies sql data 包含读sql语句, 默认contains sql

sql security definer 只有创建者菜能执行 invoker 表示有权限访问的就可执行

comment 注释

下面是创建一个储存过程的定义,在对应的工具中找到创建储存过程的地方。

储存函数

create function func_name (func_parameter[,…]) returns type [characteristic …] routine_body

create function 创建储存函数关键字

func_name 储存函数名字

func_parameter 参数,储存函数只能是IN

returns type 返回数据类型

characteristic 函数约束

routine_body SQL执行体

查看储存过程

show create procedure sp_name

show procedure status like ‘’

从数据库中information_schema中查询

操作

call 调用

drop 删除

alter 修改

变量

declare var_name[,…] type [default value]

declare 定义变量关键字

var_name 变量名称

type 类型

[default value] 默认值

定义条件和处理过程

条件

declare condition_name condition for condition_value

condition_name 条件名称

condition_value 条件类型

SQLSTATE [value] sqlstate_value | mysql_error_code

sqlstate_value 长度为5的错误信息

mysql_error_code 数值类型的错误代码

declare exec_refused condition for sqlstate ‘48000’;

处理程序

declare handler_type handler for condition_value[,…] sq_statement

handler_type 定义错误的处理方式

condition_value 错误类型

sq_statement 遇到错误,需要执行的储存过程或函数

handler_type

continue 继续处理

exit 退出

undo 撤回,目前不支持

condition_value

sqlstate [value] sqlstate_value

condition_name

sqlwarning

not found

sqlexception

mysql_error_code

  • sqlstate [value] sqlstate_value 长度为5的字符串的错误信息
  • condition_name 条件名称
  • sqlwarning 所有以01开头的sqlstate错误代码
  • not found 所有以02开头的sqlstate错误代码
  • sqlexception 没有被sqlwarning和not found 捕捉的错误代码
  • mysql_error_code 数值类型错误

declare continue handler for sqlstate ‘29011’ set @log=’ database not found ’

流程控制语句

if

loop (leave 退出当前流程,iterate 跳出本次循环)

while

case

本篇文章到此结束,如果您有相关技术方面疑问可以联系我们技术人员远程解决,感谢大家支持本站!


联系我们
返回顶部