MySQL基础学习: 第六章 存储过程和函数

一、存储过程

1、介绍

MySQL 中的存储过程(Stored Procedure)是一组为了完成特定功能的 SQL 语句集合。用户可以通过指定的存储过程名称和参数(如果有的话)来调用并执行它。存储过程可以在数据库中创建、存储和管理,它提供了封装重复代码的能力,使得这些代码可以在多个地方被重复调用,而不需要每次都重写。

2、特点

  • 封装性:将复杂的 SQL 逻辑封装在存储过程中,隐藏了实现细节。
  • 可复用性:存储过程可以被多次调用,而不需要重复编写相同的 SQL 代码。
  • 安全性:通过权限设置,可以限制对数据的访问,只允许特定的用户或角色调用存储过程。
  • 提高性能:存储过程在首次执行时会被编译并存储在数据库中,之后的调用不需要再次编译,从而提高了执行效率。
  • 支持事务:存储过程可以支持事务处理,确保数据的完整性和一致性。

3、创建语法

创建存储过程的基本语法如下:

DELIMITER //  
CREATE PROCEDURE procedure_name (IN param1 datatype, OUT param2 datatype, ...)  
BEGIN  
    -- SQL 语句  
END //  
DELIMITER ;
  • DELIMITER:用于更改默认的语句结束符(默认为分号),因为在存储过程中可能会包含多个分号。
  • CREATE PROCEDURE:用于创建存储过程。
  • procedure_name:存储过程的名称。
  • IN、OUT:用于指定参数是输入参数还是输出参数。
  • BEGIN … END:存储过程的主体,包含要执行的 SQL 语句。

注意

  • 参数列表包含三部分:参数模式 参数名 参数类型。
    • IN:该参数可以作为输入,也就是该参数需要调用放传入值。
    • OUT:该参数可以作为输出,也就是该参数可以作为返回值。
    • INOUT:该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值。
  • 如果存储过程体仅仅一句话,BEGIN END可以省略,存储过程体中的每条SQL语句的结尾要求必须加分号。存储过程的结尾可以使用DELIMITER重新设置;语法DELLIMITER 结束标记。

4、调用语法

(1)语法

调用存储过程的基本语法如下:

CALL procedure_name(param1, param2, ...);

(2)示例

  • 空参列表
DELIMITER  //  
CREATE PROCEDURE myp1()
BEGIN
    INSERT INTO admin(username, password) values
       ('john1', '0000'),
       ('john2', '0000'),
    ('john3', '0000'),
    ('john4', '0000'),
    ('john5', '0000');
END //  
DELIMITER ;  
-- 调用
CALL myp1();
  • 带in模式参数的存储过程
    以下是一个简单的示例,展示如何创建一个存储过程来插入一条记录,并返回新记录的 ID:
DELIMITER //  
CREATE PROCEDURE InsertUser(IN username VARCHAR(50), IN email VARCHAR(100), OUT user_id INT)  
BEGIN  
    INSERT INTO users (username, email) VALUES (username, email);  
    SET user_id = LAST_INSERT_ID();  
END //  
DELIMITER ;  
  
-- 调用存储过程  
CALL InsertUser('John Doe', 'johndoe@example.com', @user_id);  
-- 查询输出参数的值  
SELECT @user_id;

在这个示例中,InsertUser 存储过程接受两个输入参数(username 和 email)和一个输出参数(user_id)。它首先向 users 表中插入一条新记录,然后使用 LAST_INSERT_ID() 函数获取新记录的 ID,并将其赋值给输出参数 user_id。最后,我们可以通过调用 CALL 语句来执行存储过程,并使用用户定义的变量 @user_id 来接收输出参数的值。

  • 创建带out模式的存储过程
    在MySQL中,当你想从存储过程返回一个或多个值给调用者,但不想让调用者直接修改这些值时,你可以使用OUT模式的参数。以下是一个创建带有OUT模式参数的存储过程的示例:
DELIMITER //  
  
CREATE PROCEDURE GetEmployeeCount(OUT employeeCount INT)  
BEGIN  
    -- 假设我们有一个名为employees的表,我们想计算其中的员工数量  
    SELECT COUNT(*) INTO employeeCount FROM employees;  
END //  
  
DELIMITER ;

在这个例子中,我们创建了一个名为GetEmployeeCount的存储过程,它接受一个OUT模式的参数employeeCount。在存储过程内部,我们使用了一个SELECT … INTO语句来从employees表中计算员工数量,并将结果存储在employeeCount变量中。由于employeeCount是OUT模式的参数,所以当存储过程执行完毕后,它的值将被返回给调用者。

要调用这个存储过程并查看OUT参数的值,你可以这样做:

SET @count = 0; -- 初始化一个用户定义的变量来接收返回值  
CALL GetEmployeeCount(@count); -- 调用存储过程,并传入@count作为OUT参数  
SELECT @count; -- 查看变量@count的值,它现在包含了从存储过程中返回的员工数量

在这个调用中,我们首先设置了一个用户定义的变量@count的值为0。然后,我们调用了GetEmployeeCount存储过程,并将@count作为参数传递给它。由于@count是OUT模式的参数,存储过程将把计算得到的员工数量存储在@count中。最后,我们查询了@count的值,它现在包含了从存储过程中返回的员工数量。

  • 创建带inout模式参数的存储过程
    在MySQL中,INOUT 是存储过程参数的一种模式,它允许你传递一个值给存储过程,并在存储过程中修改这个值,然后将修改后的值传回给调用者。

以下是一个创建带有 INOUT 模式参数的存储过程的示例:

DELIMITER //  
  
CREATE PROCEDURE SetAndIncrement(INOUT counter INT)  
BEGIN  
    -- 在这里,我们对counter进行了一些操作,比如增加它的值  
    SET counter = counter + 1;  
    -- 你也可以添加其他逻辑来处理counter  
END //  
  
DELIMITER ;

在这个例子中,我们创建了一个名为 SetAndIncrement 的存储过程,它接受一个 INOUT 类型的参数 counter。在存储过程内部,我们将 counter 的值增加了1。

要调用这个存储过程并查看 INOUT 参数的变化,你可以这样做:

SET @myCounter = 10; -- 初始化一个用户定义的变量  
CALL SetAndIncrement(@myCounter); -- 调用存储过程,并传入@myCounter作为参数  
SELECT @myCounter; -- 查看变量@myCounter的值,现在它应该是11

在这个调用中,我们首先设置了一个用户定义的变量 @myCounter 的值为10。然后,我们调用了 SetAndIncrement 存储过程,并将 @myCounter 作为参数传递给它。由于 counter 是 INOUT 类型的参数,存储过程可以修改它的值。最后,我们查询了 @myCounter 的值,现在它应该是11,因为存储过程已经将它的值增加了1。

5、删除语法

在MySQL中,要删除一个已经存在的存储过程,你可以使用DROP PROCEDURE语句。以下是删除存储过程的基本语法:

DROP PROCEDURE IF EXISTS procedure_name;

在这里,procedure_name是你想要删除的存储过程的名称。IF EXISTS子句是可选的,但它是一个好习惯,因为它会检查存储过程是否存在,如果存储过程不存在,则不会抛出错误。

例如,如果你有一个名为SetAndIncrement的存储过程,并且你想要删除它,你可以使用以下SQL语句:

DROP PROCEDURE IF EXISTS SetAndIncrement;

执行这条语句后,如果SetAndIncrement存储过程存在,它将被删除;如果不存在,则不会有任何错误发生。

6、查看语法

在MySQL中,要查看存储过程的定义或相关信息,你可以使用不同的方法。以下是一些常见的方法来查看存储过程:

  • 使用SHOW CREATE PROCEDURE语句
    你可以使用SHOW CREATE PROCEDURE语句来查看存储过程的创建语句。例如:
SHOW CREATE PROCEDURE SetAndIncrement;

这将返回SetAndIncrement存储过程的完整创建语句。
在这里插入图片描述

  • 从information_schema.ROUTINES表中查询
    information_schema是一个包含数据库元数据的特殊数据库。你可以从ROUTINES表中查询存储过程的信息。例如:
SELECT ROUTINE_NAME, ROUTINE_TYPE, DATA_TYPE, ROUTINE_DEFINITION  
FROM information_schema.ROUTINES  
WHERE ROUTINE_SCHEMA = 'your_database_name' AND ROUTINE_NAME = 'SetAndIncrement';

在上面的查询中,你需要将your_database_name替换为你的数据库名称。ROUTINE_DEFINITION列将包含存储过程的创建语句。
在这里插入图片描述

7、修改语法

存储过程不能修改,若涉及到修改,可以先删除,然后重建。

二、函数

  • 55
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
【完整课件如下】 MySQL从入门到精通 第01章 初始MySQL(共19页).ppt MySQL从入门到精通 第02章 MySQL的安装与配置(共14页).ppt MySQL从入门到精通 第03章 数据库的基本操作(共11页).ppt MySQL从入门到精通 第04章 数据表的基本操作(共26页).ppt MySQL从入门到精通 第05章 数据类型和运算符(共17页).ppt MySQL从入门到精通 第06章 MySQL函数(共76页).ppt MySQL从入门到精通 第07章 查询数据(共48页).ppt MySQL从入门到精通 第08章 插入、更新与删除数据(共10页).ppt MySQL从入门到精通 第09章 索引(共11页).ppt MySQL从入门到精通 第10章 存储过程函数(共19页).ppt MySQL从入门到精通 第11章 视图(共20页).ppt MySQL从入门到精通 第12章 触发器(共11页).ppt MySQL从入门到精通 第13章 用户管理(共25页).ppt MySQL从入门到精通 第14章 数据备份与还原(共21页).ppt MySQL从入门到精通 第15章 MySQL日志(共22页).ppt MySQL从入门到精通 第16章 性能优化(共18页).ppt MySQL从入门到精通 第17章 MySQL Workbench5.2 的使用(共15页).ppt MySQL从入门到精通 第18章 MySQL Replication(共27页).ppt MySQL从入门到精通 第19章 MySQL Cluster(共49页).ppt MySQL从入门到精通 第20章 PHP操作MySQL数据库(共7页).ppt MySQL从入门到精通 第21章 MySQL实战-新闻发布系统数据库设计(共6页).ppt MySQL从入门到精通 第22章 MySQL实战-论坛管理系统数据库设计(共6页).ppt
【完整课件如下】 MySQL从入门到精通 第01章 初始MySQL(共19页).ppt MySQL从入门到精通 第02章 MySQL的安装与配置(共14页).ppt MySQL从入门到精通 第03章 数据库的基本操作(共11页).ppt MySQL从入门到精通 第04章 数据表的基本操作(共26页).ppt MySQL从入门到精通 第05章 数据类型和运算符(共17页).ppt MySQL从入门到精通 第06章 MySQL函数(共76页).ppt MySQL从入门到精通 第07章 查询数据(共48页).ppt MySQL从入门到精通 第08章 插入、更新与删除数据(共10页).ppt MySQL从入门到精通 第09章 索引(共11页).ppt MySQL从入门到精通 第10章 存储过程函数(共19页).ppt MySQL从入门到精通 第11章 视图(共20页).ppt MySQL从入门到精通 第12章 触发器(共11页).ppt MySQL从入门到精通 第13章 用户管理(共25页).ppt MySQL从入门到精通 第14章 数据备份与还原(共21页).ppt MySQL从入门到精通 第15章 MySQL日志(共22页).ppt MySQL从入门到精通 第16章 性能优化(共18页).ppt MySQL从入门到精通 第17章 MySQL Workbench5.2 的使用(共15页).ppt MySQL从入门到精通 第18章 MySQL Replication(共27页).ppt MySQL从入门到精通 第19章 MySQL Cluster(共49页).ppt MySQL从入门到精通 第20章 PHP操作MySQL数据库(共7页).ppt MySQL从入门到精通 第21章 MySQL实战-新闻发布系统数据库设计(共6页).ppt MySQL从入门到精通 第22章 MySQL实战-论坛管理系统数据库设计(共6页).ppt
完整全套资源下载地址:https://download.csdn.net/download/qq_27595745/66208010 【完整课程列表】 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第01章 初始MySQL(共19页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第02章 MySQL的安装与配置(共14页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第03章 数据库的基本操作(共6页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第04章 数据表的基本操作(共28页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第05章 数据类型和运算符(共17页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第06章 MySQL函数(共76页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第07章 查询数据(共50页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第08章 插入、更新与删除数据(共12页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第09章 索引(共13页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第10章 存储过程函数(共20页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第11章 视图(共20页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第12章 触发器(共11页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第13章 MySQL权限与安全管理(共30页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第14章 数据备份与还原(共21页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第15章 MySQL日志(共23页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第16章 性能优化(共23页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第17章 MySQL Replication(共27页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第18章 MySQL Workbench 的使用(共18页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第19章 MySQL管理利器-MySQL Utilities(共5页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第20章 读写分离的利器-MySQL Proxy(共8页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第21章 精通MySQL存储引擎(共31页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第22章 PHP操作MySQL数据库(共16页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第23章 PDO数据库抽象类库(共12页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第24章 开发网上商城(共6页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第25章 论坛管理系统数据库设计(共6页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第26章 新闻发布系统数据库设计(共9页).ppt
完整全套资源下载地址:https://download.csdn.net/download/qq_27595745/66208010 【完整课程列表】 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第01章 初始MySQL(共19页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第02章 MySQL的安装与配置(共14页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第03章 数据库的基本操作(共6页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第04章 数据表的基本操作(共28页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第05章 数据类型和运算符(共17页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第06章 MySQL函数(共76页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第07章 查询数据(共50页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第08章 插入、更新与删除数据(共12页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第09章 索引(共13页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第10章 存储过程函数(共20页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第11章 视图(共20页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第12章 触发器(共11页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第13章 MySQL权限与安全管理(共30页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第14章 数据备份与还原(共21页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第15章 MySQL日志(共23页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第16章 性能优化(共23页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第17章 MySQL Replication(共27页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第18章 MySQL Workbench 的使用(共18页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第19章 MySQL管理利器-MySQL Utilities(共5页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第20章 读写分离的利器-MySQL Proxy(共8页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第21章 精通MySQL存储引擎(共31页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第22章 PHP操作MySQL数据库(共16页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第23章 PDO数据库抽象类库(共12页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第24章 开发网上商城(共6页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第25章 论坛管理系统数据库设计(共6页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第26章 新闻发布系统数据库设计(共9页).ppt

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玉成226

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值