您现在的位置是:首页 >技术教程 >MySQL:存储过程网站首页技术教程

MySQL:存储过程

Sun_Sherry 2024-06-17 11:19:19
简介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表示存储过程可以修改数据。

参考资料:

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。