专业汉语词典知识平台,分享汉字词语知识、历史文学知识解答!

励北网
励北网

数据库存储过程怎么写,mysql存储过程详解

来源:小易整编  作者:小易  发布时间:2022-12-27 02:43
摘要:数据库存储过程怎么写,mysql存储过程详解。今天我们梳理MySQL数据库中存储过程的知识点。在商业数据库应用中,例如金融、企业、政府等等,存储过程的使用非常广泛。但是在互联网行业,存储过程很少使用,一个重要的原因是MySQL的广泛使用,而...

数据库存储过程怎么写,mysql存储过程详解。今天我们梳理MySQL数据库中存储过程的知识点。在商业数据库应用中,例如金融、企业、政府等等,存储过程的使用非常广泛。但是在互联网行业,存储过程很少使用,一个重要的原因是MySQL的广泛使用,而MySQL的存储过程的功能很弱(跟商业数据库相比)。

数据库存储过程怎么写,mysql存储过程详解

1.存储过程

SQL语句需要先编译然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。

存储过程是可编程的函数,在数据库中创建并保存,可以由SQL语句和控制结构组成。当想要在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟,它允许控制数据的访问方式。

2.存储过程的优点

存储过程的优点:

  1. 增强SQL语言的功能和灵活性:存储过程可以用控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。

  2. 标准组件式编程:存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。

  3. 较快的执行速度:如果某一操作包含大量的Transaction-SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的。在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些。

  4. 减少网络流量:针对同一个数据库对象的操作(如查询、修改),如果这一操作所涉及的Transaction-SQL语句被组织进存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而大大减少网络流量并降低了网络负载。

  5. 作为一种安全机制来充分利用:通过对执行某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。

3.存储过程的创建

MySQL 存储过程是一些 SQL 语句的集合,比如有时候我们可能需要一大串的 SQL 语句,或者说在编写 SQL 语句的过程中需要设置一些变量的值,这个时候我们就完全有必要编写一个存储过程。

编写存储过程并不是件简单的事情,但是使用存储过程可以简化操作,且减少冗余的操作步骤,同时,还可以减少操作过程中的失误,提高效率,因此应该尽可能的学会使用存储过程。

下面主要介绍如何创建存储过程。

可以使用 CREATE PROCEDURE 语句创建存储过程,语法格式如下:

 CREATE PROCEDURE <过程名> ( [过程参数[,…] ] ) <过程体>
 [过程参数[,…] ] 格式
 [ IN | OUT | INOUT ] <参数名> <类型>

语法说明如下:

  1. 过程名

    存储过程的名称,默认在当前数据库中创建。若需要在特定数据库中创建存储过程,则要在名称前面加上数据库的名称,即 数据库名.存储过程名。

    需要注意的是,名称应当尽量避免选取与 MySQL 内置函数相同的名称,否则会发生错误。

  2. 过程参数

    存储过程根据需要可能会有输入、输出、输入输出参数,如果有多个参数用","分割开。MySQL存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT:

    IN参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值

    OUT:该值可在存储过程内部被改变,并可返回

    INOUT:调用时指定,并且可被改变和返回

  3. 过程体

    存储过程的主体部分,也称为存储过程体,包含在过程调用的时候必须执行的 SQL 语句。这个部分以关键字 BEGIN 开始,以关键字 END 结束。若存储过程体中只有一条 SQL 语句,则可以省略 BEGIN-END 标志。

示例:

 -- 存储过程INOUT参数
 DELIMITER //
   CREATE PROCEDURE inout_param(INOUT p_inout int)
     BEGIN
       SELECT p_inout;
       SET p_inout=2;
       SELECT p_inout;
     END;
     //
 DELIMITER ;
 -- 调用
 SET @p_inout=1;
 CALL inout_param(@p_inout) ;
 SELECT @p_inout;
 
 -- 存储过程OUT参数
 DELIMITER //
   CREATE PROCEDURE out_param(OUT p_out int)
     BEGIN
       SELECT p_out;
       SET p_out=2;
       SELECT p_out;
     END;
     //
 DELIMITER ;
 -- 调用
 SET @p_out=1;
 CALL out_param(@p_out);
 SELECT @p_out;

4.DELIMITER 命令

在存储过程的创建中,经常会用到一个十分重要的 MySQL 命令,即 DELIMITER 命令,特别是对于通过命令行的方式来操作 MySQL 数据库的使用者,更是要学会使用该命令。

在 MySQL 中,服务器处理 SQL 语句默认是以分号作为语句结束标志的。然而,在创建存储过程时,存储过程体可能包含有多条 SQL 语句,这些 SQL 语句如果仍以分号作为语句结束符,那么 MySQL 服务器在处理时会以遇到的第一条 SQL 语句结尾处的分号作为整个程序的结束符,而不再去处理存储过程体中后面的 SQL 语句,这样显然不行。

为解决以上问题,通常使用 DELIMITER 命令将结束命令修改为其他字符。语法格式如下:

 DELIMITER $$

语法说明如下:

  • $$ 是用户定义的结束符,通常这个符号可以是一些特殊的符号,如两个“?”或两个“¥”等。

  • 当使用 DELIMITER 命令时,应该避免使用反斜杠“\”字符,因为它是 MySQL 的转义字符。

在 MySQL 命令行客户端输入如下 SQL 语句。

 mysql > DELIMITER ??

成功执行这条 SQL 语句后,任何命令、语句或程序的结束标志就换为两个问号“??”了。

若希望换回默认的分号“;”作为结束标志,则在 MySQL 命令行客户端输入下列语句即可:

 mysql > DELIMITER ;

注意:DELIMITER 和分号“;”之间一定要有一个空格。在创建存储过程时,必须具有 CREATE ROUTINE 权限。

5.查看存储过程

创建好存储过程后,用户可以通过 SHOW ATATUS 语句来查看存储过程的状态,也可以通过 SHOW CREATE 语句来查看存储过程的定义。

查看存储过程的状态

MySQL 中可以通过 SHOW STATUS 语句查看存储过程的状态,其基本语法形式如下:

 SHOW PROCEDURE STATUS LIKE 存储过程名;

LIKE 存储过程名用来匹配存储过程的名称,LIKE 不能省略。

查看存储过程的定义

MySQL 中可以通过 SHOW CREATE 语句查看存储过程的状态,语法格式如下:

 SHOW CREATE PROCEDURE 存储过程名;

6.修改存储过程

在实际开发过程中,业务需求修改的情况时有发生,所以修改 MySQL 中的存储过程是不可避免的。

MySQL 中通过 ALTER PROCEDURE 语句来修改存储过程。本节将详细讲解修改存储过程的方法。

MySQL 中修改存储过程的语法格式如下:

 ALTER PROCEDURE 存储过程名 [ 特征 ... ]

特征指定了存储过程的特性,可能的取值有:

  • CONTAINS SQL 表示子程序包含 SQL 语句,但不包含读或写数据的语句。

  • NO SQL 表示子程序中不包含 SQL 语句。

  • READS SQL DATA 表示子程序中包含读数据的语句。

  • MODIFIES SQL DATA 表示子程序中包含写数据的语句。

  • SQL SECURITY { DEFINER |INVOKER } 指明谁有权限来执行。

  • DEFINER 表示只有定义者自己才能够执行。

  • INVOKER 表示调用者可以执行。

  • COMMENT 'string' 表示注释信息。

7.调用存储过程

存储过程通过 CALL 语句来调用

调用存储过程

MySQL 中使用 CALL 语句来调用存储过程。调用存储过程后,数据库系统将执行存储过程中的 SQL 语句,然后将结果返回给输出值。

CALL 语句接收存储过程的名字以及需要传递给它的任意参数,基本语法形式如下:

 CALL sp_name([parameter[...]]);

其中,sp_name 表示存储过程的名称,parameter 表示存储过程的参数。

8.存储过程中变量的定义和赋值

在 MySQL 中,除了支持标准的存储过程和函数外,还引入了表达式。表达式与其它高级语言的表达式一样,由变量、运算符和流程控制来构成。

变量是表达式语句中最基本的元素,可以用来临时存储数据。在存储过程和函数中都可以定义和使用变量。用户可以使用 DECLARE 关键字来定义变量,定义后可以为变量赋值。这些变量的作用范围是 BEGIN...END 程序段中。

1. 定义变量

MySQL 中可以使用 DECLARE 关键字来定义变量,其基本语法如下:

 DECLARE var_name[,...] type [DEFAULT value]

其中:

  • DECLARE 关键字是用来声明变量的;

  • var_name 参数是变量的名称,这里可以同时定义多个变量;

  • type 参数用来指定变量的类型;

  • DEFAULT value 子句将变量默认值设置为 value,没有使用 DEFAULT 子句时,默认值为 NULL。

2. 为变量赋值

MySQL 中可以使用 SET 关键字来为变量赋值,SET 语句的基本语法如下:

 SET var_name = expr[,var_name = expr]...

其中:

  • SET 关键字用来为变量赋值;

  • var_name 参数是变量的名称;

  • expr 参数是赋值表达式。

注意:一个 SET 语句可以同时为多个变量赋值,各个变量的赋值语句之间用逗号隔开。

MySQL 中还可以使用 SELECT..INTO 语句为变量赋值。其基本语法如下:

 SELECT col_name [...] INTO var_name[,...]
 FROM table_name WEHRE condition

其中:

  • col_name 参数表示查询的字段名称;

  • var_name 参数是变量的名称;

  • table_name 参数指表的名称;

  • condition 参数指查询条件。

注意:当将查询结果赋值给变量时,该查询语句的返回结果只能是单行

9.删除存储过程

存储过程被创建后,就会一直保存在数据库服务器上,直至被删除。当 MySQL 数据库中存在废弃的存储过程时,我们需要将它从数据库中删除。

MySQL 中使用 DROP PROCEDURE 语句来删除数据库中已经存在的存储过程。语法格式如下:

 DROP PROCEDURE [ IF EXISTS ] <过程名>

语法说明如下:

  • 过程名:指定要删除的存储过程的名称。

  • IF EXISTS:指定这个关键字,用于防止因删除不存在的存储过程而引发的错误。

注意:存储过程名称后面没有参数列表,也没有括号,在删除之前,必须确认该存储过程没有任何依赖关系,否则会导致其他与之关联的存储过程无法运行。


本文地址:百科问答频道 https://www.neebe.cn/wenda/886401.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!


百科问答
小编:小易整编
相关文章相关阅读
  • 数据库管理是什么意思?

    数据库管理是什么意思?

    数据库管理是指通过数据库管理系统来管理、访问存储在数据库中的数据的过程。它也和实现电子档案库、图书馆的相关软件的开发有着密切的联系。数据库管理特别强调数据的独立性和可移植性,从而保证数据的可靠性和安全性。数据库管理的主要作用,是把一些内容...

  • 共享数据库是什么意思?

    共享数据库是什么意思?

    共享数据库是一种常见的开发工作流程,即团队中的所有开发人员都共享某一个数据库的访问权限,都使用该数据库来支持应用程序开发。无需为每个工程师配置基础架构,使安装成本降至最低,因而人们愿意选择它。但由于工程师做出改变的同时不得不承担着影响其他...

  • 公用数据库是什么

    公用数据库是什么

    公共数据库是指数据库软件(如Access、SQLServer等)生成的各种包含元器件信息的表格文件。AltiumDesign通过创建和使用关联数据库DBLib文件,可直接从公共数据库调取元器件并通过连接库文件与公共数据库保持同步更新。公共...

  • 关系型数据库的基本原理是什么

    关系型数据库的基本原理是什么

    关系型数据库采用的是关系模型,即把数据组织成一个或多个表格(称为关系),每个表格包含多个列,每行代表一个记录。这种模型的优点是简单易懂,容易维护,便于数据查询和修改。其次是数据结构,关系型数据库采用的是二维表格结构,每个表格有一个主键用于唯...

  • 云数据库RDS是什么

    云数据库RDS是什么

    关系型数据库(RDS)是一种稳定可靠、可弹性伸缩的在线数据库服务。具有多重安全防护措施和完善的性能监控体系,并提供专业的数据库备份、恢复及优化方案,使您能专注于应用开发和业务发展。关系型数据库(RelationalDatabaseSer...

  • 数据库系统由哪几部分组成,什么是数据库系统

    数据库系统由哪几部分组成,什么是数据库系统

    数据库系统由哪几部分组成,什么是数据库系统各位小伙伴们,最近忙于自己的事情,难得闲下心来想在这里记录些什么,在自己做网络知识相关笔记的时候,才想起自己的知识库里存有之前学习的数据库相关的知识,所幸的是自己的勤快做的笔记能够存留下来,于是自己...

  • 外键约束怎么写,MySql外键约束教程

    外键约束怎么写,MySql外键约束教程

    外键约束怎么写,MySql外键约束教程学习目标掌握外键约束的添加方法知道外键约束字段的添加及删除规则1.多表查询概述l实际开发中,一个项目通常需要很多张表才能完成。l例如:一个商城项目就需要分类表(category)、商品表(product...

  • 关系数据库有哪几种,常用关系数据库介绍

    关系数据库有哪几种,常用关系数据库介绍

    关系数据库有哪几种,常用关系数据库介绍数据库管理系统是用于创建,维护与管理数据库的系统软件,是搭建其他应用环境所必备的软件之一,是软件系统架构的重要组成部分。对于IT人员,不论是开发还是测试人员都是其必须掌握的软件。对于开发可以说是他们吃饭...

  • 周排行
  • 月排行
  • 年排行

精彩推荐