我的编程空间,编程开发者的网络收藏夹
学习永远不晚

浅谈MYSQL存储过程和存储函数

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

浅谈MYSQL存储过程和存储函数

1. 什么是存储过程和存储函数?

  • 存储过程(Stored Procedure)是指在一个数据库中存储的一组执行SQL语句的集合。存储过程可以封装业务逻辑,提高数据库执行效率,同时也可以提高数据访问的安全性。
  • 存储函数(Stored Function)是指在一个数据库中存储的一组执行SQL语句的集合,与存储过程的区别在于,存储函数有一个返回值。

2. 创建存储过程

CREATE PROCEDURE procedure_name([IN/OUT] parameter_name data_type)
BEGIN
    SQL Statement;
END;

假设我们已经有一张名为employee的员工表,现在需要创建一个存储过程,可以根据员工的工号查询员工的姓名和工资:

DELIMITER //
CREATE PROCEDURE get_employee_info_by_id(IN emp_id INT)
BEGIN
    SELECT name, salary FROM employee WHERE id = emp_id;
END //
DELIMITER ;

3. 创建存储函数

CREATE FUNCTION function_name([IN/OUT] parameter_name data_type) RETURNS data_type
BEGIN
    DECLARE variable_name data_type;
    SQL Statement;
    RETURN variable_name;
END;

假设我们已经有一张名为product的商品表,现在需要创建一个存储函数,可以根据商品的编号查询商品的单价:

DELIMITER //
CREATE FUNCTION get_product_price_by_id(IN product_id INT) RETURNS DECIMAL(10,2)
BEGIN
    DECLARE price DECIMAL(10,2);
    SELECT unit_price INTO price FROM product WHERE id = product_id;
    RETURN price;
END //
DELIMITER ;

4. 存储过程和存储函数的使用

  • 调用存储过程:
CALL procedure_name([parameter_name]);
  • 调用存储函数:
SELECT function_name([parameter_name]);

使用上面创建的get_employee_info_by_id存储过程可以这样调用:

CALL get_employee_info_by_id(1);

使用上面创建的get_product_price_by_id存储函数可以这样调用:

SELECT get_product_price_by_id(1001);

以下是一些常见的存储过程和存储函数的示例:

5. 带有if语句的存储过程

假设我们已经有一张名为employee的员工表,现在需要创建一个存储过程,查询员工的姓名和工资,如果工资大于5000,则在结果中添加一个备注:“高收入”。

DELIMITER //
CREATE PROCEDURE get_employee_info_with_note()
BEGIN
    SELECT name, salary, IF(salary > 5000, '高收入', '') AS note FROM employee;
END //
DELIMITER ;

6. 带有循环语句的存储过程

假设我们已经有一张名为product的商品表,现在需要创建一个存储过程,把商品的单价全部乘以1.1。

DELIMITER //
CREATE PROCEDURE update_all_product_price()
BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE pid INT;
    DECLARE price DECIMAL(10,2);
    DECLARE cur CURSOR FOR SELECT id, unit_price FROM product;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
    OPEN cur;
    read_loop: LOOP
        FETCH cur INTO pid, price;
        IF done THEN
            LEAVE read_loop;
        END IF;
        UPDATE product SET unit_price = price * 1.1 WHERE id = pid;
    END LOOP;
    CLOSE cur;
END //
DELIMITER ;

7. 带有事务的存储过程

假设我们已经有一张名为order的订单表和一张名为order_item的订单详情表,现在需要创建一个存储过程,向这两张表中插入一条记录。

DELIMITER //
CREATE PROCEDURE insert_order(IN order_id INT, IN item_name VARCHAR(50), IN item_price DECIMAL(10,2), IN item_quantity INT)
BEGIN
    START TRANSACTION;
    INSERT INTO `order`(id) VALUES(order_id);
    SET @last_order_id = LAST_INSERT_ID();
    INSERT INTO order_item(order_id, item_name, item_price, item_quantity) VALUES(@last_order_id, item_name, item_price, item_quantity);
    COMMIT;
END //
DELIMITER ;

8. 带有游标的存储函数

假设我们已经有一张名为product的商品表,现在需要创建一个存储函数,查询商品表中的最大单价。

DELIMITER //
CREATE FUNCTION get_max_product_price() RETURNS DECIMAL(10,2)
BEGIN
    DECLARE max_price DECIMAL(10,2);
    DECLARE cur CURSOR FOR SELECT unit_price FROM product;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET max_price = 0;
    OPEN cur;
    FETCH cur INTO max_price;
    read_loop: LOOP
        FETCH cur INTO max_price;
        IF max_price IS NULL THEN
            LEAVE read_loop;
        END IF;
        IF max_price > @max_price THEN 
            SET @max_price = max_price;
        END IF;
    END LOOP;
    CLOSE cur;
    RETURN max_price;
END //
DELIMITER ;

以上就是mysql存储过程和存储函数的学习文章及示例,希望对您有帮助。

9. 存储过程和存储函数的优点

  • 代码可以重复使用,避免重复编写SQL语句;
  • 在存储过程和存储函数中可以使用流程控制语句,处理复杂逻辑;
  • 通过存储过程和存储函数可以对数据库操作进行封装,提高效率和安全性。

10.总结

在MYSQL中,存储过程和存储函数可以帮助我们封装业务逻辑,提高数据库执行效率,同时也可以提高数据访问的安全性。学会使用存储过程和存储函数可以帮助我们更好地管理和优化数据库。

到此这篇关于浅谈MYSQL存储过程和存储函数的文章就介绍到这了,更多相关MYSQL存储过程和存储函数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

浅谈MYSQL存储过程和存储函数

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

浅谈MYSQL存储过程和存储函数

目录1. 什么是存储过程和存储函数?2. 创建存储过程3. 创建存储函数4. 存储过程和存储函数的使用5. 带有if语句的存储过程6. 带有循环语句的存储过程7. 带有事务的存储过程8. 带有游标的存储函数9. 存储过程和存储函数的优点10
2023-05-05

MySQL 存储过程和函数

创建存储过程和函数创建存储过程和函数就是将经常使用的一组 SQL 语句组合在一起,并将这些 SQL 语句当作一个整体存储在 MySQL 服务器1. 创建存储过程CREATE PROCEDURE procedure_name ([proc_param[,...]
MySQL 存储过程和函数
2018-04-13

MySQL存储过程和函数

存储过程与函数类似与Java的方法和C语言的函数存储过程概述含义一组经过预先编译的SQL语句的封装执行过程:存储过程预先存储在MySQL服务器上,客户端发出命令后,服务器可以把预先存储好的SQL语句全部执行好处简化操作,提高了SQL语句的通用性,减少开发程序员
MySQL存储过程和函数
2020-11-16

关于MySQL的存储过程与存储函数

存储过程是在大型数据库系统中,一组为了完成特定功能的SQL 语句集(这些SQL语句已经编译过了),它存储在数据库中,一次编译后永久有效,需要的朋友可以参考下
2023-05-19

存储过程和函数 oracle

declare begin   dbms_output.put_line("Hello World"); end; declare   i number := 10; begin   if i > 5 then     dbms_output.put_line
存储过程和函数 oracle
2021-01-19

mysql存储过程与存储函数实例分析

这篇文章主要介绍了mysql存储过程与存储函数实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇mysql存储过程与存储函数实例分析文章都会有所收获,下面我们一起来看看吧。存储过程简介是一组经过 预先编译
2022-11-30

mysql存储过程和函数的区别

存储过程与函数的区别:存储过程可返回多个值或结果集,而函数仅返回单个标量值。存储过程通常在事务中执行,而函数可独立执行。存储过程具有副作用,而函数通常没有。存储过程可重用,但函数通常比存储过程更易于重用。存储过程性能通常较优,但函数可能更快
mysql存储过程和函数的区别
2024-04-22

创建存储函数、删除存储函数及 存储函数与存储过程的区别

之前,我们列举不少mysql自带的函数,但是有些时候自带函数并不能很好满足我们的需求,此时就需要自定义存储函数了,存储函数与存储过程有些类似,简单来说就是封装一段sql代码,完成一种特定的功能,并返回结果。其语法如下:CREATE FUNCTION 函数([参
创建存储函数、删除存储函数及 存储函数与存储过程的区别
2022-02-07

浅谈MySql 视图、触发器以及存储过程

视图什么是视图?视图的作用是什么? 视图(view)是一种虚拟存在的表,是一个逻辑表,它本身是不包含数据的。作为一个select语句保存在数据字典中的。 通过视图,可以展现基表(用来创建视图的表叫做基表base table)的部分数据,说白
2022-05-18

编程热搜

目录