• 技术文章 >数据库 >mysql教程

    mysql中什么是存储过程

    青灯夜游青灯夜游2021-06-15 09:04:21原创2875

    在mysql中,存储过程是一组为了完成特定功能的SQL语句集合。使用存储过程的目的是将常用或复杂的工作预先用SQL语句写好并用一个指定名称存储起来,这个过程经编译和优化后存储在数据库服务器中,因此称为存储过程。

    php入门到就业线上直播课:进入学习

    本教程操作环境:windows7系统、mysql8版本、Dell G3电脑。

    存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。

    存储过程是一组为了完成特定功能的 SQL 语句集合。使用存储过程的目的是将常用或复杂的工作预先用 SQL 语句写好并用一个指定名称存储起来,这个过程经编译和优化后存储在数据库服务器中,因此称为存储过程。当以后需要数据库提供与已定义好的存储过程的功能相同的服务时,只需调用“CALL存储过程名字”即可自动完成。

    常用操作数据库的 SQL 语句在执行的时候需要先编译,然后执行。存储过程则采用另一种方式来执行 SQL 语句。

    一个存储过程是一个可编程的函数,它在数据库中创建并保存,一般由 SQL 语句和一些特殊的控制结构组成。当希望在不同的应用程序或平台上执行相同的特定功能时,存储过程尤为合适。

    MySQL 5.0 版本以前并不支持存储过程,这使 MySQL 在应用上大打折扣。MySQL 从 5.0 版本开始支持存储过程,既提高了数据库的处理速度,同时也提高了数据库编程的灵活性

    存储过程是数据库中的一个重要功能,存储过程可以用来转换数据、数据迁移、制作报表,它类似于编程语言,一次执行成功,就可以随时被调用,完成指定的功能操作。

    使用存储过程不仅可以提高数据库的访问效率,同时也可以提高数据库使用的安全性。

    对于调用者来说,存储过程封装了 SQL 语句,调用者无需考虑逻辑功能的具体实现过程。只是简单调用即可,它可以被 Java 和 C# 等编程语言调用。

    创建存储过程

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

    CREATE PROCEDURE <过程名> ( [过程参数[,…] ] ) <过程体>

    [过程参数[,…] ] 格式

    [ IN | OUT | INOUT ] <参数名> <类型>

    语法说明如下:

    1) 过程名

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

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

    2) 过程参数

    存储过程的参数列表。其中,<参数名>为参数名,<类型>为参数的类型(可以是任何有效的 MySQL 数据类型)。当有多个参数时,参数列表中彼此间用逗号分隔。存储过程可以没有参数(此时存储过程的名称后仍需加上一对括号),也可以有 1 个或多个参数。

    MySQL 存储过程支持三种类型的参数,即输入参数、输出参数和输入/输出参数,分别用 IN、OUT 和 INOUT 三个关键字标识。其中,输入参数可以传递给一个存储过程,输出参数用于存储过程需要返回一个操作结果的情形,而输入/输出参数既可以充当输入参数也可以充当输出参数。

    需要注意的是,参数的取名不要与数据表的列名相同,否则尽管不会返回出错信息,但是存储过程的 SQL 语句会将参数名看作列名,从而引发不可预知的结果。

    3) 过程体

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

    示例:

    创建名称为 ShowStuScore 的存储过程,存储过程的作用是从学生成绩信息表中查询学生的成绩信息,输入的 SQL 语句和执行过程如下所示。

    mysql> DELIMITER //
    mysql> CREATE PROCEDURE ShowStuScore()
        -> BEGIN
        -> SELECT * FROM tb_students_score;
        -> END //
    Query OK, 0 rows affected (0.09 sec)

    结果显示 ShowStuScore 存储过程已经创建成功。

    删除存储过程

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

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

    DROP PROCEDURE [ IF EXISTS ] <过程名>

    语法说明如下:

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

    实例

    下面删除存储过程 ShowStuScore,SQL 语句和运行结果如下:

    mysql> DROP PROCEDURE ShowStuScore;
    Query OK, 0 rows affected (0.08 sec)

    删除后,可以通过查询 information_schema 数据库下的 routines 表来确认上面的删除是否成功。SQL 语句和运行结果如下:

    mysql> SELECT * FROM information_schema.routines WHERE routine_name='ShowStuScore';
    Empty set (0.03 sec)

    结果显示,没有查询出任何记录,说明存储过程 ShowStuScore 已经被删除了。

    (推荐教程:mysql视频教程

    以上就是mysql中什么是存储过程的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    千万级数据并发解决方案(理论+实战):点击学习

    Mysql单表千万级数据量的查询优化与性能分析

    Mysql主从原理及其在高并发系统中的应用

    专题推荐:mysql 存储过程
    上一篇:mysql怎么删除表 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• mysql压力测试有什么用• MySQL运行SQL文件时出现问题怎么办• 如何在Kubernetes上运行高可用的WordPress和MySQL• 取消thinkphp操作mysql的30秒时间限制• mysql如何实现自增序列• php怎么删除mysql表格
    1/1

    PHP中文网