Mysql-存储过程简单入门

news2024/11/17 22:18:48

定义:

        存储过程的英文是 Stored Procedure 。它的思想很简单,就是一组经过 预先编译 的 SQL 语句 的封装。 执行过程:存储过程预先存储在 MySQL 服务器上,需要执行的时候,客户端只需要向服务器端发出调用 存储过程的命令,服务器端就可以把预先存储好的这一系列 SQL 语句全部执行。

创建存储过程模板语法:

CREATE PROCEDURE 存储过程名(IN|OUT|INOUT 参数名 参数类型,...)
[characteristics ...]

BEGIN

 存储过程体

END

参数解释

参数前符号

IN :当前参数为输入参数,也就是表示入参; 存储过程只是读取这个参数的值。如果没有定义参数种类, 默认就是 IN ,表示输入参数。

OUT :当前参数为输出参数,也就是表示出参; 执行完成之后,调用这个存储过程的客户端或者应用程序就可以读取这个参数返回的值了。

INOUT :当前参数既可以为输入参数,也可以为输出参数。

存储过程的约束条件

characteristics 表示创建存储过程时指定的对存储过程的约束条件,其取值信息如下

1. LANGUAGE SQL :说明存储过程执行体是由SQL语句组成的,当前系统支持的语言为SQL。

2. [NOT] DETERMINISTIC :指明存储过程执行的结果是否确定。DETERMINISTIC表示结果是确定 的。每次执行存储过程时,相同的输入会得到相同的输出。NOT DETERMINISTIC表示结果是不确定 的,相同的输入可能得到不同的输出。如果没有指定任意一个值,默认为NOT DETERMINISTIC。

3. { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } :指明子程序使 用SQL语句的限制:

1)CONTAINS SQL表示当前存储过程的子程序包含SQL语句,但是并不包含读写数据的SQL语句;

2)NO SQL表示当前存储过程的子程序中不包含任何SQL语句;

3)READS SQL DATA表示当前存储过程的子程序中包含读数据的SQL语句;

4)MODIFIES SQL DATA表示当前存储过程的子程序中包含写数据的SQL语句。

5)默认情况下,系统会指定为CONTAINS SQL。

4.SQL SECURITY { DEFINER | INVOKER } :执行当前存储过程的权限,即指明哪些用户能够执 行当前存储过程。

1)DEFINER 表示只有当前存储过程的创建者或者定义者才能执行当前存储过程;

2)INVOKER 表示拥有当前存储过程的访问权限的用户能够执行当前存储过程。

3)如果没有设置相关的值,则MySQL默认指定值为DEFINER。

4)COMMENT 'string' :注释信息,可以用来描述存储过程。

 关键字解释

1. BEGIN…END:BEGIN…END 中间包含了多个语句,每个语句都以(;)号为结束符。

2. DECLARE:DECLARE 用来声明变量,使用的位置在于 BEGIN…END 语句中间,而且需要在其他语句使用之前进 行变量的声明。

3. SET:赋值语句,用于对变量进行赋值。

4. SELECT… INTO:把从数据表中查询的结果存放到变量中,也就是为变量赋值。

 Demo示例

sql脚本,在本地自己任意一个练习的数据库下直接运行就好,包括表结构和数据

DROP TABLE IF EXISTS `employees`;
CREATE TABLE `employees`  (
  `EMPLOYEE_ID` int(12) NOT NULL,
  `LAST_NAME` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `MANAGER_ID` int(11) NULL DEFAULT NULL,
  `SALARY` decimal(10, 2) NULL DEFAULT NULL,
  `department_id` int(11) NULL DEFAULT NULL,
  `location` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of employees
-- ----------------------------
INSERT INTO `employees` VALUES (100, 'STEVEN', 100, 1000.00, 50, 'jiangsu');
INSERT INTO `employees` VALUES (101, 'Kochhar', 100, 2000.00, 10, 'shenzhen');
INSERT INTO `employees` VALUES (102, 'De Haan', 100, 1000.00, 50, 'jiangsu');
INSERT INTO `employees` VALUES (103, 'Hunold', 102, 2000.00, 20, 'shenzhen');
INSERT INTO `employees` VALUES (104, 'Emst', 103, 1000.00, 30, 'jiangsu');
INSERT INTO `employees` VALUES (107, 'Lorentz', 103, 3000.00, 20, 'shenzhen');
INSERT INTO `employees` VALUES (124, 'Mourgos', 100, 1000.00, 40, 'beijing');

SET FOREIGN_KEY_CHECKS = 1;

数据效果:

 存储过程使用及其解释

需求:

        创建存储过程show_mgr_name(),查询某个员工领导的姓名,并用INOUT参数“empname”输入员工姓名,#输出领导的姓名。

#使用 DELIMITER 
#DELIMITER 语句只是用于帮助解析器正确解释存储过程定义的语法,并不会影响代码块中使用的实际 SQL 语句。
#在存储过程定义完成后,使用 DELIMITER ; 将分隔符改回默认的分号 (;)。
delimiter //
# 创建存储过程 show_mgr_name 指定为inout类型,即输如输出都是empname
create procedure show_mgr_name(inout empname varchar(25))
begin
    # 查询领导的名字,并将查询的LAST_NAME结果为变量empname赋值
    select LAST_NAME into empname
    from dbtest15.employees
        where EMPLOYEE_ID =
              #根据输入的员工姓名查询到领导的id
              (
            select MANAGER_ID
            from dbtest15.employees
            where LAST_NAME = empname
            );
end //
delimiter ;
#设置传入参数为Hunold,
set @empname :='Hunold';
# 使用call语法调用show_mgr_name存储过程
call show_mgr_name(@empname);
#查询结果:根据上面效果图片可以知道Hunold的领导是De Haan
select @empname;

调试

1. 通过 SELECT 语句,把程序执行的中间结果查询出来,来调试一个 SQL 语句的正确性。调试 成功之后,把 SELECT 语句后移到下一个 SQL 语句之后,再调试下一个 SQL 语句。

2.把存储过程中的 SQL 语句复制出来,逐段单独调试。

         很多公司禁止使用存储过程,但是存储过程或许我们不用但是还是要掌握,看懂了自己找一些例子多练练就好了。

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

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

相关文章

管中窥豹!从冠德石油看数字化对加油站的影响力

从上个世纪90年代起,至2010年前后,是国内信息化建设的高速发展期。这段时间无论是应用软件、企业网站还是商业咨询,无不呈现井喷式发展。大多数企业和政府机关均完成了或多或少的信息化建设。IT带来了标准化、科学化的管理和运作模式&#xf…

keil5 #include“头文件”前面有红叉X,但编译不报错

问题 如图 编译不报错 解决办法 keil软件界面,第一行图标栏的最后有个扳手🔧符号,点开,点击“text completion ”标签页, 右侧“text template”栏选中#define,左边“dynamic syntax checking”栏里取…

软件测试面试题自动化面经分享——这才是高薪的秘诀!

Hello,你们的好朋友来了!今天猜猜我给大家带来点啥干货呢?最近很多小伙伴出去面试的时候经常会被问到跟自动化测试相关的面试题。所以,今天特意给大家整理了一些经常被公司问到的自动化测试相关的面试题。停,咱先收藏起…

css之学好rem

1、先说说几个前端常用的几个单位的概论: 1、px (pixel,像素):是一个虚拟长度单位,是计算机系统的数字化图像长度单位,如果px要换算成物理长度,需要指定精度DPI(Dots Per Inch,每英寸像素数)&am…

Qt软件打包后报错“无法定位程序输入点于动态链接库.exe上。”解决办法(超详细,看完不会怪我)

目录 前言 一、出现类似如下界面: 二、通过尝试分析,这个界面出现的原因是因为自己没有设置环境变量 三、其次右击打开主菜单,选择系统选项 四、选择右边的高级系统设置 五、点击环境变量 六、再系统变量里面找到Path路径 七、点击编辑添…

HOOPS全新文档系统上线!三维模型文件转换更便捷!

HOOPS 2023 U1版本已经正式发布,伴随新版本上线的还有全新的文档系统,新的文档系统亮点包括: 改进了样式和布局,使导航更加简单快捷;修订了导航结构,提高了产品相关信息的清晰度;SDK API参考章…

人员与叉车防撞预警方案

叉车是仓库重吨位运输设备,在工厂、港口、码头、物流企业等有着广泛的使用。然而,叉车事故频繁发生已经引起人们的广泛关注。多数叉车因为前方货物遮挡的视线盲区多,极容易发生事故,例如撞伤人或货架导致货物倒塌伤人,…

nodejs+vue高校教室自习室预约租赁系统

本次设计的主要任务是完成一个教室预约租赁管理系统网站,本系统主要分为普通用户与管理员两个角色, 能够实现登录注册,教室预约,教室租赁,用户管理,教室管理,教室预约等功能。主要分为前端页面设计和后端逻辑功能设计以及数据库设…

循环队列讲解,以及Java实现代码

目录 一.循环队列概念 二.队满和队空的情况 三.代码的实现 总结 😽个人主页: tq02的博客_CSDN博客-C语言,Java,Java数据结构领域博主 🌈梦的目标:努力学习,向Java进发,拼搏一切,让自己的未来…

SonarQube7.8 安装及使用

文章目录 SonarQube 使用手册一、简介1.1、概述1.2、实例组件 二、安装2.1、版本选型2.2、硬件要求2.3、安装2.3.1、解压SonarQube&汉化2.3.2、创建SonarQube数据库2.3.3、修改数据库连接2.3.4、创建SonarQube启动用户2.3.5、赋予启动用户执行权限2.3.6、相关报错解决2.3.7…

Python 框架学习 Django篇 (二) 视图

前面我们实现了一些基本的页面与后台交互的逻辑,但可能还是很迷糊,突然甩出来一些前端的程序是欺负我忘完了吗(某人自述),还有request.POST 都是干啥的也没说清楚,这里就来详细了解一下 1、什么是视图 我们定义的任何同时包含如下…

网络安全盲目自学只会成为脚本小子?

一、网络安全学习的误区 1.不要试图以编程为基础去学习网络安全 不要以编程为基础再开始学习网络安全,一般来说,学习编程不但学习周期长,且过渡到网络安全用到编程的用到的编程的关键点不多。一般人如果想要把编程学好再开始学习网络安全往…

6. 实现简单的线程池

本文以营业厅为例子,实现简单的线程池 一、线程池介绍 现在的企业客户端数以百万,如果某一时刻同时向服务器发消息,那么服务器要处理这些消息是同时开百万个线程吗??当然不行!! 根据posix标准&…

Pinna的使用以及pinna的持续化存储(两种方法)

一、简介 pinia是 vue3 新的状态管理工具,简单来说相当于之前 vuex,它去掉了 Mutations 但是也是支持 vue2 的,需要的朋友可以参考下 二、使用方法 1.安装 npm install pinia -S 2..引入 import { createPinia,PiniaPluginContext } from p…

RocketMQ(超级无敌认真好用,万字收藏篇!!!!)

文章目录 RocketMQ1 RocketMQ简介2 Rocket安装2.1 Rocket安装(基于Linux)2.2 控制台安装 3 Rocket的使用3.1 普通消息发送3.1.1 同步消息发送3.1.2 异步消息发送3.1.3 单向消息发送 3.2 普通消息消费3.2.1 集群消费3.2.2 广播消费 3.3 收发顺序消息3.3.1 全局顺序生产消费3.2.2…

今天面试招了个23K的人,从腾讯出来的果然都有两把刷子···

公司前段时间缺人,也面了不少测试,前面一开始瞄准的就是中级的水准,也没指望来大牛,提供的薪资在15-25k,面试的人很多,但平均水平很让人失望。看简历很多都是4年工作经验,但面试中,不…

黑客辛酸成长史~入门指南

什么是黑客? 站在计算机角度上解释,黑客就是去寻找网站、系统、软件等漏洞,并利用漏洞来取得一些数据或达到控制,让对方程序崩溃等效果。 刚入门的黑客大部分从事渗透工作,而渗透大部分属于web安全方向。因此换个淳朴…

科技政策 | 科技型中小企业、高新技术企业、技术先进型服务企业认定申报时间

原创 | 文 BFT机器人 01 科技型中小企业评价入库 (一)科技型中小企业评价入口: https://fuwu.most.gov.cn/ (二)《2023年科技型中小企业评价工作的通知》查看入口: http://gdstc.gd.gov.cn/zwgk_n/tzgg/c…

Typecho搭建和美化

概述 Typecho是一款轻量级的开源PHP博客系统,它简单易用,界面整洁,性能高效,主题、插件众多。我使用的是腾讯云轻量服务器,Typecho的应用模版,一键安装环境。构建自己的博客网站,记录生活、分享…

CSPM 未来发展的思考

由于数据泄露的持续威胁以及云的短暂和快节奏的特性,只有在最基础的层面上保护您的云才有意义。组织已经转向 CSPM 解决方案来锁定他们的平台。 今天我们来聊聊什么是CSPM,它如何去产生有有效的帮助,未来会向哪发展。 什么是 CSPM&#xff1…