MySQL必知必会 学习笔记 第二十三章 使用存储过程

2023-11-12

MySQL 5中增加了存储过程的支持。

一个操作需要多条SQL语句才能完成时,可以创建存储过程,其中保存一条或多条SQL语句。

使用存储过程的理由:
1.通过把处理封装在容易使用的单元中,简化复杂的操作。
2.所有人都使用同一存储过程代替某复杂操作,可防止错误,保证了所有人使用的代码相同,保证了数据一致性。
3.简化对变动的管理,如需要更改表名、列名等,只需在存储过程中更改即可,使用它的人甚至不需要知道这些变化。
4.提高性能,使用存储过程比使用单独的SQL要快。
5.有一些只能用在单个请求中的特性,存储过程可用它们编写更强更灵活的代码。

存储过程缺陷:
1.编写比SQL复杂。
2.可能没有创建存储过程的安全访问权限。很多DBA限制存储过程创建权限,但允许用户使用存储过程。

执行存储过程:

CALL procedureName(parameterList);

创建存储过程:

CREATE PROCEDURE procedureName()
BEGIN
    存储过程内容
END;

使用命令行客户端时,默认的MySQL语句分隔符为;,在命令行中创建存储过程时,存储过程中的SQL语句的分隔符;会变成存储过程创建过程的终止符,从而出现语法错误。解决方法是临时更改语句分隔符:

DELIMITER //    # 将分隔符改为//

CREATE PROCEDURE procedureName()
BEGIN
    存储过程内容
END//

DELIMITER ;

除了\,任何字符都可用作语句分隔符。

删除存储过程:

DROP PROCEDURE procedureName;

如果此存储过程不存在,会报错,如不想报错而是用警告代替:

DROP PROCEDURE IF EXISTS procedureName;

以下是出售信息表:
在这里插入图片描述
创建一个存储过程获取上表最低、最高、平均价格:

CREATE PROCEDURE productpricing(
    OUT pl DECIMAL(8,2),
    OUT ph DECIMAL(8,2),
    OUT pa DECIMAL(8,2)
)
BEGIN
    SELECT MIN(amount), MAX(amount), AVG(amount)
    INTO pl, ph, pa    # 将三个聚集函数的结果赋值给参数
    FROM payment;
END;

MySQL支持IN(传递给存储过程)、OUT(从存储过程传出)、INOUT(对存储过程传入和传出)三种类型参数。

存储过程的参数允许的数据类型与列允许的数据类型相同。返回类型不允许是记录集,因此不能通过一个参数返回多个行和列。

调用以上存储过程:
在这里插入图片描述
MySQL中变量以@开头。

获取变量:
在这里插入图片描述
复杂的存储过程:

-- NAME: ordertotal
-- Patameters: onumber = order number
--             taxable = 0 if not taxable, 1 if taxable
--             ototal  = order total variable

CREATE PROCEDURE ordertotal(
    IN onumber INT,
    IN taxable BOOLEAN,
    OUT ototal DECIMAL(8,2)
) COMMENT 'Obtain order total, optionally adding tax'
BEGIN
    -- Declare variable for total
    DECLARE total DECIMAL(8,2);
    -- Declare tax pricentage
    DECLARE taxrate INT DEFAULT 6;
    
    -- Get the order total
    SELECT Sum(item_price * quantity)
    FROM orderitems
    WHERE order_num = onumber
    INTO total;

    -- Is this taxable?
    IF taxable THEN
        -- Yes, so add taxrate to the total
        SELECT total + (total / 100 * taxrate) INTO total;
    END IF;

    -- And finally, save to our variable
    SELECT total INTO ototal;
END;

上例中,增加了以"-- "开头的注释,MySQL支持三种形式的注释,还支持#/*...*/

上例还用DECLARE语句定义了两个局部变量,要求指定变量名和数据类型,它支持可选的默认值。

上例的IF检查taxable是否为真,还支持ELSEIF(要使用THEN子句)和ELSE(不使用THEN子句)子句。

COMMENT关键字可在SHOW PROCEDURE STATUS中显示,此命令还能显示何时、由谁创建等详细信息的存储过程列表,可使用LIKE筛选存储过程名:

SHOW PROCEDURE STATUS LIKE 'pattern';

显示存储过程的创建语句:

SHOW CREATE PROCEDURE procedureName;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL必知必会 学习笔记 第二十三章 使用存储过程 的相关文章

  • MYSQL必知必会:格式化导入导出数据集

    在mysql中 我们可以把查询到的结果集通过自定义的格式打印到指定文件内 指定文件不存在 如果指定文件存在 则失败 下面是表结构合表数据 1 格式化导出数据 把表order info的所有记录的所有字段导入到 d 1 sql 文件内 sel
  • MySQL必知必会 学习笔记 第十九章 插入数据

    插入可用以下方式进行 1 插入完整行 2 插入行的一部分 3 插入多行 4 插入某些查询的结果 可针对每个表或每个用户 利用MySQL的安全机制禁止使用INSERT语句 插入语句没有输出 插入完整的行 INSERT INTO tableNa
  • MySQL必知必会 学习笔记 第二十六章 管理事务处理

    并非所有引擎都支持事务处理 MyISAM不支持 InnoDB支持 事务处理可用来维护数据库的完整性 它保证成批的MySQL操作要么完全执行 要么完全不执行 如果没有错误发生 整组语句写到数据库表 如果发生错误 将已经执行的部分语句进行回退
  • MySQL必知必会——第十四章使用子查询

    使用子查询 本章介绍什么是子查询以及如何使用它们 子查询 SELECT语句是SQL的查询 目前我们用的所有SELECT语句都是从单个数据库表中检索数据的单条简单语句 查询 query 任何SQL语句都是查询 但此术语一般指SELECT语句
  • MySQL必知必会 学习笔记 第一章 了解SQL

    数据库是保存有组织的数据的容器 通常是一个或一组文件 数据库软件称为DBMS 数据库管理系统 数据库是被DBMS创建和操纵的容器 数据库究竟是文件或其他东西并不重要 因为你不会直接访问数据库 而是间接通过DBMS替你访问数据库 表是某种特定
  • MySQL必知必会 学习笔记 第二十七章 全球化和本地化

    不同的语言和字符集需要以不同的方式存储和检索 MySQL需要适应不同的字符集 以及排序和检索这些数据的方法 术语 1 字符集 字母和符号的集合 2 编码 某个字符集成员的内部表示 3 校对 规定字符如何比较 查看MySQL支持的字符集列表
  • MySQL必知必会 学习笔记 第十四章 使用子查询

    MySQL 4 1引入了子查询 任何SQL语句都是查询 但此术语一般指SELECT语句 有两张表 一张是语言表 一张是电影表 选出语言是英语的电影 SELECT title FROM film WHERE language id IN SE
  • MySQL必知必会——第十章创建计算字段

    创建计算字段 本章介绍什么是计算字段 如何创建计算字段以及怎样从应用程序中使用别名引用它们 计算字段 存储在数据库表中的数据一般不是应用程序所需要的格式 例如 想在一个字段中显示公司名和地址 但公司名和地址在不同的列中等等 我们需要直接从数
  • MySQL必知必会 学习笔记 第九章 用正则表达式进行搜索

    正则表达式是用来匹配文本的特殊的串 它用正则表达式语言来建立 MySQL支持的正则表达式仅为正则表达式的一个很小的子集 可通过WHERE子句使用正则表达式过滤SELECT检索出的数据 检索条件列包含字符100的所有行 SELECT colu
  • MySQL必知必会——第十六章创建高级联结

    创建高级联结 本章将讲解另外一些联结类型 包括它们的含义和使用方法 介绍如何对被联结的表使用表别名和聚集函数 使用表别名 第十章 MySQL必知必会 第十章创建计算字段 介绍了如何使用别名引用表列 mysql gt SELECT Conca
  • MySQL必知必会——第十七章组合查询

    组合查询 本章讲述如何利用UNION操作符将多条SELECT语句组合成一个结果集 组合查询 多数SQL查询都只包含从一个或多个表中返回数据的单条SELECT语句 MySQL也允许执行多个查询 并将结果作为单个查询结果返回 这些组合查询通常称
  • MySQL必知必会——第二十章更新和删除数据

    更新和删除数据 本章介绍如何利用UPDATE和DELETE语句进一步操纵表数据 更新数据 为了更新 修改 表中的数据 可以使用UPDATE语句 UPDATE的两种用法 更新表中特定行 更新表中所有行 不要省略WHERE子句 缺少WHERE子
  • MySQL必知必会 学习笔记 第二十八章 安全管理

    用户应该具有适当的访问权 既不能多也不能少 MySQL Administrator提供了图形界面 可用来管理用户和账号权限 MySQL创建一个名为root的用户账号 它对整个MySQL服务器有完全的控制 在日常工作中 决不能使用root 而
  • MySQL必知必会 学习笔记 第七章 数据过滤

    可用AND操作符给WHERE子句附加条件 SELECT columnName FROM tableName WHERE columnName1 1 AND columnName2 2 OR操作符指示MySQL匹配符合操作符任一端条件的行 S
  • MySQL必知必会——第六章过滤数据

    过滤数据 本章将讲授如何使用SELECT语句的WHERE子句指定搜索条件 使用WHERE子句 数据库一般包含大量的数据 很少需要检索表中所有的行 通常只会根据需求来提取部分表数据 只检索所需数据需要指定搜索条件 search criteri
  • MySQL必知必会 学习笔记 第二十三章 使用存储过程

    MySQL 5中增加了存储过程的支持 一个操作需要多条SQL语句才能完成时 可以创建存储过程 其中保存一条或多条SQL语句 使用存储过程的理由 1 通过把处理封装在容易使用的单元中 简化复杂的操作 2 所有人都使用同一存储过程代替某复杂操作
  • MySQL必知必会 学习笔记 第十八章 全文本搜索

    并非所有引擎都支持全文本搜索 MyISAM支持 更新 1 MySQL 5 6 以前的版本 只有 MyISAM 存储引擎支持全文索引 2 MySQL 5 6 及以后的版本 MyISAM 和 InnoDB 存储引擎均支持全文索引 3 只有字段的
  • MySQL必知必会 学习笔记 第十二章 汇总数据

    聚集函数是运行在行组上 计算和返回单个值的函数 对表中数据而非实际数据本身进行汇总 如获取行数 获取某列最值等 除上述函数外 MySQL还支持标准偏差聚集函数 返回某列平均值 SELECT AVG columnName AS avgVal
  • MySQL必知必会——第四章检索数据

    检索数据 本章将介绍如何使用SELECT语句从表中检索一个或多个数据列 SELECT语句 SQL语句是由简单的英语单词关键字构成的 每个SQL语句都由一个或多个关键字构成 最常用的SQL语句就是SELECT语句 它的用途是从一个或多个表中检
  • MySQL必知必会 学习笔记 第二十五章 使用触发器

    触发器在MySQL 5中增加 触发器可以在MySQL响应DELETE INSERT UPDATE语句时自动执行一条SQL语句 MySQL 5中触发器名在每个表中唯一而不是在一个数据库中唯一 其他DBMS有的重名限制是数据库范围 以后MySQ

随机推荐

  • 自定义带参数二维码扫码进入微信小程序获取参数

    第一步 需要进入小程序后台 开发设置里 添加二维码规则 第二步 添加好扫码进入的规则 比如扫码进去小程序的指定页面 1 协议类型选择https 2 选择小写 3 二维码规则 这个看文档有些人估计会比较迷糊 简单理解一下就是一个https的路
  • 后台@RequestBody接收对象List属性为null

    后台 RequestBody接收对象List属性为null 前端把一个本应传String类型的属性 传成了List数组 会导致后面的所有List属性都会变成null
  • C语言扫雷解析

    目录 扫雷功能说明 游戏界面 游戏分析设计 数据结构的分析 文件结构设计 扫雷游戏代码的实现 game h game c 初始化数组 打印棋盘 布置雷 统计周围雷的个数 排查结果判定 test c 扫雷功能说明 使用控制台实现经典的扫雷游戏
  • php模块化供前端ajax调用的实现

    背景 没有使用php框架 由于临时需求 需要ajax调用php中的方法 简单的写了一个php文件 文件定义了两个方法 如何用ajax分别调用同一个php文件不同的方法 以下是abc php文件 我定义的两个方法a方法和b方法
  • 发现了uroport工具的一个bug,还不知道如何解决

    点击条件属性下的 配置条件 进行配置的 让一个属性等于0的时候控制样式 预览 保存一切正常 等到下次打开这个文件的时候 表示等于的双等号 变成了undefined 如下图 这时候点保存 或者预览 都也点不了 但是不耽误使用 也可以一个一个将
  • Springboot2整合阿里云OSS实现文件上传、下载、删除、查看

    1 阿里云配置 https jingyan baidu com article ea24bc3973db059a63b3316d html 2 pom文件
  • qml基础学习 模型视图(一)

    文章目录 一 理解qml模型和视图 二 效果展示 三 源码分析 1 GridView增删 2 列表 3 卡牌效果 四 相关文章 一 理解qml模型和视图 qt的发展是迅速的 虽然在每一个release版本中或多或少都有bug 但是作为一个庞
  • 组合数学-鸽巢原理

    中国剩余定理证明笔记
  • 传播正能量——做一个快乐的程序员

    引子 今天在博客园看到施瓦小辛格的文章我们搞开发的为什么会感觉到累 顿时有感而发 自己本来不擅长写文章 更不擅长写这种非技术性的文章 但是在思绪喷薄之际 还是止不住有很多话要说 针对从客观上说 搞开发的很累 这种说法 我也来发表一下我的看法
  • Nginx转发,swagger误将upstream作为base url

    在用Nginx转发请求到sprint boot上游服务的时候 有一个配置项 如果处理不好 会导致在swagger里面无法访问API 下面来看一下实例 实例来自VMWare 开源项目Singleton https github com vmw
  • Spring源码学习笔记

    一 Spring启动容器刷新12步 二 Spring循环引用流程图 三 SpringAop执行流程 四 Spring事务的个人理解 Spring事务的使用非常简单 只需要在需要开启事务的方法上加 Transactional rollback
  • 【机器学习实战-14章】利用SVD简化数据

    奇异值分解 Singular Value Decomposition SVD 是提取信息的强大工具 14 1 SVD的应用 优点 简化数据 去除噪声 提高算法的结果 缺点 数据的转换可能难以理解 14 1 1 隐性语义索引 最早的SVD应用
  • python 气泡图练习

    导入了matplotlib pyplot和seaborn模块 以及gapminder数据集 它从gapminder数据集中选择了2007年的数据 并创建了一个散点图 其中x轴表示人均GDP y轴表示预期寿命 气泡的大小表示人口规模 图例被关
  • BurpSuite之Intruder模块学习篇

    BurpSuite介绍 BurpSuite介绍 Intruder模块 该模块重要用于完成对Web应用程序自动化攻击 也就是我们经常说的爆破 下面我们以爆破DVWA靶机的暴力破解页面来介绍该模块的一个个版块 进行演示之前我们先进去把登录密码给
  • c++ 关键字constexpr的使用

    一 想要正确使用constexpr关键字 需要知道编译时常量和运行时常量 1 编译时常量 编译时已知的常量 编译器知道其确切的值 字符串常量 如 123 hello world 等 以常量表达式初始化的const变量 如 const x 2
  • Redis 缓存回收的7种策略volatile设置过期时间及allkeys所有数据范围内

    1 基础说明 当redis设置内存使用限制后 当达到内存限制时 Redis将尝试删除key 控制节点的最大使用内存 redis conf中配置项maxmemory
  • 威马汽车:跃马扬鞭未竟,鞍马劳顿难行?

    活下去 像牲口一样地活下去 威马汽车创始人 董事长兼CEO沈晖1月在社交媒体上分享的电影台词 已然成为威马近况的真实写照 来源 新浪微博 威马汽车沈晖Freeman 最近 网上出现了大量关于 威马汽车将实施全员停薪留职 的消息 还有网友发布
  • 将 Matlab 启动文件夹指定为 userpath

    将 Matlab 启动文件夹指定为 userpath 在使用 Matlab 进行编程时 我们可能需要在程序启动时打开一个特定的文件夹 而不是默认的文件夹 这篇文章将介绍如何将 Matlab 的启动文件夹指定为 userpath 首先 让我们
  • C语言编写基于mysql数据库的简单数据管理系统

    系统环境 Ubuntu 14 04 安装mysql数据库 sudo apt get install mysql server mysql client 安装mysql开发包SDK sudo apt get install libmysqlc
  • MySQL必知必会 学习笔记 第二十三章 使用存储过程

    MySQL 5中增加了存储过程的支持 一个操作需要多条SQL语句才能完成时 可以创建存储过程 其中保存一条或多条SQL语句 使用存储过程的理由 1 通过把处理封装在容易使用的单元中 简化复杂的操作 2 所有人都使用同一存储过程代替某复杂操作