您现在的位置是:首页 >技术教程 >MySQL:存储过程网站首页技术教程
MySQL:存储过程
简介MySQL:存储过程
本篇博客主要介绍MySQL中的存储过程及触发器的用法。
1 存储过程
存储过程是一组为完成特定功能的SQL语句,类似一门程序设计语言,也包括数据类型、流程控制、输入和输出和它自己的函数库。其基本语法如下:
CREATE
[DEFINER = { user | CURRENT_USER }]
PROCEDURE sp_name ([proc_parameter[,...]])
[characteristic ...] routine_body
proc_parameter:
[ IN | OUT | INOUT ] param_name 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
[begin_label:] BEGIN
[statement_list]
……
END [end_label]
下面先以一个简单的例子说明存储过程的例子(这个是在navicat中的存储过程写法)。具体如下:
CREATE DEFINER=`root`@`localhost` PROCEDURE `Proc_1`(IN s_id INTEGER)
BEGIN
DELETE FROM score_copy
WHERE student_id=s_id;
END
下面依次介绍存储过程语法中各个部分的用法。
definer部分
definer部分主要用于指定存储过程的所有者。创建过程时可以指定definer语句,以授权存储过程的访问权限。当指定了definer后,只有该创建者或所有者才有权限执行该存储过程,其他用户需要授权才能访问。若未指定,则默认使用当前用户作为创建者。在储存过程中指定definer可以提高安全性,限制对关键操作的访问权限,同时也可以便于管理和维护,方便授权和监控。
proc_parameter部分
proc_parameter部分用来指定参数。存储过程中的参数有三种类型:
- IN类型:输入参数。表示调用者向存储过程传入值。这个值可以是字面量也可以是变量。
- OUT类型:输出参数。表示存储过程向调用者传出值,可以返回多个值传出值只能是变量。
- INOUT类型:输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值,这个值只能是变量。
characteristic部分
在MySQL存储过程中,characteristic部分指的是存储过程的特点或特性,包括存储过程的语法结构、参数类型、返回值类型、权限等。具体包含的部分如下:
-
comment语句:指存储过程的注释或描述信息。这些信息通常包含关于存储过程的用途、输入输出参数的说明、返回结果的类型等。
-
LANGUAGE SQL:指存储过程使用的语言类型为SQL。
-
DETERMINISTIC:指存储过程是否是确定性的。如果一个存储过程是确定性的,那么给定相同的输入参数,它将始终返回相同的结果。这个特性对于一些关键业务逻辑很重要,因为它保证了存储过程的行为是可预测的,从而提高了系统的可靠性和安全性。
-
以下四个语句是一组的,具体如下:
- CONTAINS SQL:是指存储过程中是否包含SQL语句。
- NO SQL:指存储过程不包含任何SQL语句。如果存储过程不需要访问或修改数据库中的数据,例如仅进行计算或逻辑判断等操作,则可以使用NO SQL语句来指定。
- READS SQL DATA:表示存储过程只读取数据,不修改数据。
- MODIFIES SQL DATA:表示存储过程可以修改数据。
-
SQL SECURITY:存储过程中的是指指定存储过程是由哪个用户执行的。具体分为两种:
- INVOKER:指定存储过程的执行者是定义该存储过程的用户。
- DEFINER:指定存储过程的执行者是some_user用户,该用户必须具有执行该存储过程的权限。
READS SQL DATA表示存储过程只读取数据,不修改数据;MODIFIES SQL DATA表示存储过程可以修改数据。
参考资料:
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。