从0开始学mysql 第九课:MySQL 存储过程

第九课:MySQL 存储过程

学习目标

本课程旨在帮助你:

  1. 了解存储过程的概念及其在数据库管理中的作用。
  2. 学会创建简单的存储过程。
  3. 掌握如何调用存储过程以执行一系列预定义的操作。
  4. 了解如何管理(更新和删除)存储过程。
  5. 学习存储过程的基本调试和优化。
学习内容
1. 存储过程简介

存储过程是一组为了执行一个特定任务而预编译的SQL语句。它们被存储在数据库中,可以通过指定的名称和参数被多次调用。

2. 创建存储过程

创建存储过程使用 CREATE PROCEDURE 语句。你可以为存储过程定义输入 (IN) 参数、输出 (OUT) 参数和输入输出 (INOUT) 参数。

  • 基础语法

    DELIMITER //CREATE PROCEDURE procedure_name (parameter_list)
    BEGIN-- SQL statements
    END //DELIMITER ;
    
  • 示例

    DELIMITER //CREATE PROCEDURE GetCustomerLevel(IN customer_id INT, OUT level VARCHAR(10))
    BEGINDECLARE order_total INT;SELECT SUM(order_amount) INTO order_total FROM orders WHERE customer_id = customer_id;IF order_total > 10000 THENSET level = 'Gold';ELSEIF order_total > 5000 THENSET level = 'Silver';ELSESET level = 'Bronze';END IF;
    END //DELIMITER ;
    
3. 调用存储过程

调用存储过程使用 CALL 语句,并传递所需参数。

  • 语法

    CALL procedure_name(parameter_list);
    
  • 示例

    CALL GetCustomerLevel(101, @level);
    SELECT @level AS customer_level;
    
4. 管理存储过程
  • 查看存储过程
    使用 SHOW PROCEDURE STATUS 查看当前数据库的所有存储过程。

    SHOW PROCEDURE STATUS WHERE Db = 'your_database_name';
    
  • 修改存储过程
    若要修改存储过程,你需要先删除它,然后重新创建。使用 DROP PROCEDURECREATE PROCEDURE

    DROP PROCEDURE IF EXISTS procedure_name;
    -- 然后重新使用CREATE PROCEDURE语法来创建存储过程
    
  • 删除存储过程
    使用 DROP PROCEDURE 删除存储过程。

    DROP PROCEDURE IF EXISTS procedure_name;
    
5. 存储过程的调试和优化
  • 调试
    由于MySQL不支持类似于其他数据库的存储过程调试功能,调试通常依赖于插入 SELECT 语句来查看变量值或使用 SIGNAL 语句来引发错误。

  • 优化

    • 确保只在必要时使用存储过程。
    • 避免在存储过程中使用复杂的查询逻辑。
    • 减少存储过程中的数据访问次数。
课后练习
  1. 创建存储过程
    编写一个存储过程,它接受订单ID作为输入参数,并返回该订单的总金额。

  2. 调用存储过程
    调用上面创建的存储过程,查看特定订单的总金额。

  3. 修改存储过程
    修改上述存储过程,使其能够接受一个额外的折扣参数,并在返回订单总金额时应用这个折扣。

  4. 删除存储过程
    如果你的存储过程不再需要,写出删除该存储过程的SQL命令。

解析:

  1. DELIMITER //
    CREATE PROCEDURE GetOrderTotal(IN order_id INT, OUT total_amount DECIMAL(10,2))
    BEGINSELECT SUM(quantity * unit_price) INTO total_amount FROM order_details WHERE order_id = order_id;
    END //
    DELIMITER ;
    
  2. CALL GetOrderTotal(5, @total);
    SELECT @total AS total_amount;
    
  3. DELIMITER //
    CREATE PROCEDURE GetOrderTotalWithDiscount(IN order_id INT, IN discount DECIMAL(10,2), OUT total_amount DECIMAL(10,2))
    BEGINSELECT SUM(quantity * unit_price) * (1 - discount) INTO total_amount FROM order_details WHERE order_id = order_id;
    END //
    DELIMITER ;
    
  4. DROP PROCEDURE IF EXISTS GetOrderTotal;
    DROP PROCEDURE IF EXISTS GetOrderTotalWithDiscount;
    

通过完成这些练习,你将能够更好地理解存储过程的创建、调用和管理,同时也能够掌握一些基本的调试和优化技巧。

第十课:MySQL 自定义函数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/641906.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3 中组合键实现换行

vue3 中组合键实现换行 需求背景 有一个聊天室功能,采用输入框的形式,输入完毕使用Enter,可以直接进行发送。使用一些组合键 比如 commandEnter / shiftEnter / alt Enter … 可以实现换行操作。但现实的情况是,原生 Enter 天然…

【JavaEE Spring】MyBatis 操作数据库(基础操作)

MyBatis 操作数据库 本节目标前⾔JDBC 操作⽰例回顾1. 什么是MyBatis?2. MyBatis⼊⻔2.1 准备⼯作2.1.1 创建⼯程2.1.2 数据准备 2.2 配置数据库连接字符串2.3 写持久层代码2.4 单元测试 3. MyBatis的基础操作3.1 打印⽇志3.2 参数传递3.3 增(Insert)3.4 删(Delete)3.5 改(Upd…

Matlab 将工作区变量保存到文件中(save)

语法 1、save(filename) 2、save(filename,variables) 3、save(filename,variables,fmt) 4、save(filename,variables,version) 5、save(filename,variables,version,-nocompression) 6、save(filename,variables,-append) 7、save(filename,variables,-append,-nocompression…

太赞了!微信自动回复法宝,让沟通更高效!

如今,微信已成为人们生活和工作中不可或缺的一部分。然而,对于一些有多个微信账号的人说,常常会因为微信号太多,消息太多没能及时回复,或是客户咨询的问题很多都差不多,每次都要复制粘贴很是麻烦。 要想一…

记录yolov8_obb训练自己的数据集

一.数据集制作 1.标注软件:roLabelImg roLabelImg是基于labelImg改进的,是用来标注为VOC格式的数据,但是在labelImg的基础上增加了能够使标注的框进行旋转的功能。 2.数据格式转换 2.1 xml转txt # 文件名称 :roxml_to_dota.p…

Leetcode—40.组合总和II【中等】

2023每日刷题&#xff08;七十七&#xff09; Leetcode—40.组合总和II 算法思想 实现代码 class Solution { public:vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {vector<vector<int>> ans;vector<int…

【漏洞修复】Apache Log4j 远程代码执行漏洞(CVE-2021-44228、CVE-2021-45046)

摘要 本文档适用于OpenEuler20、OpenEuler21、OpenEuler22、麒麟V10 SP3、统信V10操作系统&#xff0c;修复Log4漏洞。 问题描述 Apache Log4j是一个功能强大的日志组件&#xff0c;提供方便的日志记录。Apache Log4j2存在远程代码执行漏洞&#xff0c;由于Apache Log4j2某些…

[UEFI]ROM镜像的备份与还原

ROM镜像的备份与还原 实现Setup下面BIOS的备份还原 该功能实现两个方面&#xff0c;备份到U盘、从U盘还原 1、备份到U盘 把&#xff52;&#xff4f;&#xff4d;里的数据复制到盘中 1&#xff09;找到FAT32的文件系统 每个UEFI系统至少有一个ESP(EFI System Partition)分区…

深度解析SD-WAN和混合WAN的网络方案区别

在企业网络的不断发展中&#xff0c;根据业务需要选择不同的广域网&#xff08;WAN&#xff09;解决方案显得至关重要。传统的基于传输控制协议/因特网协议&#xff08;TCP/IP&#xff09;的WAN是一种私有广域网&#xff0c;由企业网络和互联网服务提供商&#xff08;ISP&#…

python222网站实战(SpringBoot+SpringSecurity+MybatisPlus+thymeleaf+layui)-热门标签推荐显示实现

锋哥原创的SpringbootLayui python222网站实战&#xff1a; python222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火爆连载更新中... )_哔哩哔哩_bilibilipython222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火…

【PyTorch】6.Learn about the optimization loop 了解优化循环

Learn about the optimization loop 了解优化循环 Optimizing Model Parameters 优化模型参数 现在我们有了模型和数据&#xff0c;是时候通过优化数据上的参数来训练、验证和测试我们的模型了。训练模型是一个迭代过程&#xff1b;在每次迭代中&#xff0c;模型都会对输出进…

Vue 动态组件与异步组件:深入理解与全面应用

聚沙成塔每天进步一点点 本文内容 ⭐ 专栏简介1. 动态组件实现原理&#xff1a;用法示例&#xff1a; 2. 异步组件实现原理&#xff1a;用法示例&#xff1a; 3. 异步组件的高级应用a. 异步组件的命名&#xff1a;b. 异步组件的加载状态管理&#xff1a; ⭐ 写在最后 ⭐ 专栏简…

element plus表格的表头和内容居中

文章目录 需求分析 需求 对于 element-plus 中的 table 进行表头和内容的居中显示 分析 单列的表头和内容居中 &#xff1a; 在对应的那一列加上align“center” 即可 <el-table-column prop"name" label"商品名称" align"center" />…

c++QT文件IO

1、QFileDialog文件对话框 与QMessageBox一样&#xff0c;QFileDialog也继承了QDialog类&#xff0c;直接使用静态成员函数弹窗。弹出的结果&#xff08;选择文件的路径&#xff09;通过返回值获取。 1&#xff09;获取一个打开或保存的文件路径 // 获取一个打开或保存的文件路…

WEB前端IDE的使用以及CSS的应用

IDE的使用 <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, i…

Unity3D控制人物移动的多种方法

系列文章目录 unity知识点 文章目录 系列文章目录前言一、人物移动之键盘移动1-1、代码如下1-2、效果 二、人物移动之跟随鼠标点击移动2-1、代码如下2-2、效果 三、人物移动之刚体移动3-1、代码如下3-2、效果 四、人物移动之第一人称控制器移动4-1、代码如下4-2、效果 五、And…

从编程中思考:大脑的局部与全局模式(一)

郭靖正在帐篷中用Unity写代码&#xff0c;刚写完一段代码。欧阳锋从帐篷外走进来&#xff0c;正要说点什么&#xff0c;郭靖反应敏捷&#xff0c;转身反手一招神龙摆尾击出&#xff0c;将欧阳锋震出帐篷&#xff0c;灰溜溜逃跑。 using UnityEngine;public class LocalGlobalD…

Maven 综合案例

1. 项目需求和结构分析 需求案例&#xff1a;搭建一个电商平台项目&#xff0c;该平台包括用户服务、订单服务、通用工具模块等。 项目架构&#xff1a; 用户服务&#xff1a;负责处理用户相关的逻辑&#xff0c;例如用户信息的管理、用户注册、登录等。 spring-context 6.0.…

P1320 压缩技术(续集版)(C语言)

基本思路是&#xff1a; 1.读入字符串并计算n值 2.字符串连接&#xff08;要用到strcat&#xff09; 3.输出n值 4.计算字符数并输出 其中输出时第一个数字是0的个数&#xff0c;这个很容易被遗漏。 #include<stdio.h> #include<string.h> int main() {char a[…

centos 7.6 进入单用户模式

1、重启服务器&#xff0c;在选择内核界面使用上下箭头移动 2、选择内核并按“e” 将“RO”改成 rw ,删除 rhgb quiet 添加 init/bin/bash Ctrl X 进入单用户模式 为防止乱码&#xff0c;修改语言为英语 修改完密码建议输入&#xff1a;touch /.autorelabel 更新系统信…