mysql workbench使用存储过程

2023-11-16

MySQL 使用存储过程

先来了解一下什么是mysql的存储过程:
Mysql存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式。
要注意的地方:
1.不能在一个存储过程里定义另一个存储过程,但可以调用另一个存储过程
2.编译器为了区分存储过程和普通sql语句,在写存储过程是需要定义分割符来分割delimiter $$
如:

delimiter $$
create procedure p(in a int)
begin
set a=2;
select a;
end;$$

否则编译器会报错
3.同一个名称的存储过程只能创建一次,再次创建需要把原来的删了。

实战例子:
学生表:
CREATE TABLE [dbo].[Student](
[StudentID] [int] IDENTITY(1,1) NOT NULL, –主键
[Number] varchar NULL, –学号
[Name] nchar NULL, –学生姓名
[ClassID] [int] NOT NULL –学生所在班级ID
)
班级表:
create table Class(
[ClassID] [int] IDENTITY(1,1) NOT NULL, –班级ID
[Code] varchar NULL, –班级编号
[ClassName] nchar NULL –班级名
)
插入班级数据:
insert into Class select ‘003’,’计算机3班’
insert into Class select ‘001’,’计算机1班’
insert into Class select ‘002’,’计算机2班’
insert into Class select ‘005’,’计算机5班’
insert into Class select ‘004’,’计算机4班’
任课老师:
create table Teacher(
[TeacherID] [int] IDENTITY(1,1) NOT NULL, –老师ID
[TeacherName] nchar NULL, –老师名称
[ClassID] [int] NOT NULL – 老师所教的班级ID
)
插入数据:
insert into Teacher select ‘陈老师’, 1
insert into Teacher select ‘李老师’, 3
insert into Teacher select ‘王老师’, 2
insert into Teacher select ‘赵老师’, 5
要求:编写一个可分页的存储过程,返回所有已安排了某任课老师的学生。要求:每页显示10条数据,页码和某任课老师可作为参数传入。需要列出学生的姓名、学号、以及学生所在的班级名和班级编号。
直接在workbench上的查询页面上输入下面代码:(’#’为我添加的注释,可去掉)

use dbo;
DELIMITER $$
CREATE DEFINER=`kjs`@`%` PROCEDURE `proc`(in pageindex int,in teacherName nvarchar(8))
begin
declare ssql varchar(4000);#定义变量
declare sstart int;
declare send int;
set sstart=(pageindex-1)*10;#设置sstart的值
set send=pageindex*10-1;
set @ssql=concat('select student.Name,student.Number,class.ClassName,class.Code from
student join class join teacher where student.ClassId=class.ClassID 
and class.ClassID=teacher.ClassID and teacher.TeacherName="',teacherName,'" limit ',sstart,',',send);#拼接数据库字符串
prepare ssql from @ssql;#准备存储过程数据库执行语句
execute ssql;#执行数据库语句
deallocate prepare ssql;#结束后删除该准备
end$$

运行即可,可以见到这dbo数据库里的routines中生成了一个名为proc的存储过程,如图:
这里写图片描述
那么如何测试存储过程呢?
很简单,在查询页面上调用该proc存储过程,并输入相应的参数即可

use dbo;
call proc(1,"李老师")

更多请查看参考的相关链接点击更多内容

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

mysql workbench使用存储过程 的相关文章

  • 使用 Groovy 连接到 MySQL

    我正在尝试在 MAC OS 10 10 5 Yosemite 上使用以下 Groovy 代码连接到 MySQL 数据库 import groovy sql Sql try def dbURL jdbc mysql localhost 330
  • 两个日期之间有多少周

    我的数据库 MySQL 中有开始日期和结束日期 我怎样才能得到答案 这两个日期有多少周 或天 mysql 或 php 例如我有这样的数据库 开始并 会停2009 12 17 2009 12 242009 12 12 2009 12 26 更
  • 检查 MySQL 和 PHP 中是否都存在 ids 列表

    最有效的方法是什么MySQL and PHP检查 id 列表是否全部存在 我希望函数返回结果是true if allid 存在 否则false 我刚在想 ids array 2233 5545 9478 5343 3545 do all g
  • 在php中循环多维数组并执行mysql插入(股票数据)

    我有一个多维数组 我希望循环遍历它并为数组中的值执行 mysql 数据库插入 我需要插入到 sql 查询中的数组值是 candles 0 complete candles 0 volume candles 0 mid h candles 0
  • 如何避免此 PDO 异常:当其他未缓冲的查询处于活动状态时无法执行查询

    我想在我的页面中打印一个包含 3 列的简单表格 building name tags and architecture style 如果我尝试检索列表building names and arch styles没有问题 SELECT bui
  • 为 Codeigniter 中的 foreach() 提供的参数无效

    我收到错误消息 我的视图中 foreach 的参数无效 我想显示 mysql 表中的所有条目 但我不断收到错误消息 我是 Codeigniter 的新手 无法真正弄清楚如何解决这个问题 代码如下 我的模型 display branch ph
  • 在 LAMP 配置中创建个性化 URL

    在 LAMP 配置下创建用户个性化 URL 的最佳方法是什么 例如 可以按如下方式访问用户个人资料页面 http www website com profile php id 1 http www website com profile p
  • InnoDB vs. MyISAM 插入查询时间

    我有一个大型 MySQL 表 约 1000 万行 6 5G 用于读取和写入 它是MyISAM 由于MyISAM 的所有表写入锁 我获得了很多锁 我决定尝试迁移到 InnoDB 推荐用于读 写表 它只锁定写入时的特定行 转换后 我测试了插入语
  • GROUP_CONCAT 逗号分隔符 - MySQL

    我有一个疑问 我在哪里使用GROUP CONCAT和自定义分隔符 因为我的结果可能包含逗号 这一切都运行良好 但它仍然以逗号分隔 所以我的输出是 Result A Result B Result C 我怎样才能做到这一点 输出是 Resul
  • 如何在 Eclipse 中使用 MySql 数据库

    我对编程非常陌生 所以请耐心等待 如果一开始我没有理解的话 请提前道歉 我正在做一个本科编程项目 需要在 Java 程序中创建一些数据库 我正在使用 eclipse galilo 来编写我的程序 我已经下载了一个连接器 J 但还不知道应该如
  • PHP 和 MySQLi 中没有选择数据库错误[重复]

    这个问题在这里已经有答案了 我必须从 MySQL 数据库中选择数据 我一直在寻找答案 但仍然没有找到 我正在学习W3School http www w3schools com php php mysql select asp 我的 MySQ
  • 提交ajax表单并停留在同一页面不起作用

    我想将用户的评论存储在我的数据库中 当用户提交时 我不想将他们重定向到新页面 我有以下代码 但它不起作用 我的 HTML 代码
  • 将表与同一个表的前一条记录连接起来

    我有一个包含历史记录的表 由主表中的多个触发器发布到那里 我想在历史表上创建一个 select 语句 其中每个记录都由其先前的记录 由相同的 LineID 和最高的 ActionDate 标识 连接 这样我就可以提取这两者之间的差异 我尝试
  • MySQL 多个 IN 条件对同一个表进行子查询

    我有多个带有子查询的 IN 条件 SELECT S name S email FROM something S WHERE 1 NOT IN SELECT id FROM tags WHERE somethingId S id AND 2
  • 使用 JOIN 和 UNION 合并不同表中的记录

    我需要创建一个查询来组合两个表中的数据 我认为可能是 JOIN 和 UNION 的组合 在此示例中 我需要列出状态处于活动状态的所有姓名 仅一次 并将他们的葡萄酒 苏打水 晚餐 甜点和水果偏好组合起来 按姓名排序 我不确定单独的 JOIN
  • 一次将多个值插入MySQL [重复]

    这个问题在这里已经有答案了 谁能解释一下为什么这个 PHP MySQL 不起作用 基本上我需要从表单中一次插入大量行 因此会有多个名称字段 多个短 中 长字段等 我收到此错误 Notice Undefined variable Short1
  • 如何将 MySql 表导出/转储到文本文件中,包括字段名称(也称为标题或列名称)

    在 MySql 的解释器中 很容易将表及其字段名称转储到屏幕上 似乎没有简单的方法可以将表导出到制表符分隔或 CSV 输出文件包括它的列标题 我尝试仅使用 SQL 或 Linux 命令行来完成此操作 而不用其他语言编写程序 谢谢 将查询通过
  • 使用 Hibernate Dialect 设置表字符集/排序规则?

    我使用 Hibernate MySQLInnoDB Dialect 来生成 DDL hibernate cfg xml
  • 计算行数并仅获取表中的最后一行

    我有一张桌子叫employeexam其结构和数据是这样的 id course id employee id degree date 1 1 3 8 2013 01 14 2 2 4 15 2013 01 14 3 2 4 17 2013 0
  • $_SESSION 中保存大量信息可以吗?

    我需要存储许多数组 SESSION以防止从 MySQL 检索信息 可以吗 其中 太多 的信息有多少 SESSION还是没有 太多 谢谢 附 或者更好地使用http php net manual en book memcache php ht

随机推荐

  • Mac配置item2高亮颜色

    item2颜色生效配置 1 bash设置 在导入并应用完颜色方案之后 通过命令vim bash profile 或open bash profile编辑文件 添加以下内容 之后source bash profile来应用文件修改 CLICO
  • 数据技术之数据挖掘

    第7章 数据挖掘 1 什么是数据挖掘 数据挖掘 Data Mining 就是从大量的数据中 提取隐藏在其中的 事先不知道的 但潜在有用的信息的过程 数据挖掘的目标是建立一个决策模型 根据过去的行动数据来预测未来的行为 2 阿里数据挖掘平台
  • TypeScript笔记

    数据基础类型定义 let username string 管理员 username 系统管理员 模板字符串 使用反引号 let describe string 今天天气 weather sencence方式 let info string
  • Spring Cloud微服务项目实战笔记(二)是什么推动了单体应用到微服务架构的演进?

    首先对比的是单体应用 一个有问题 大家都完蛋 重新回滚到上一版本 开发测试沟通成本也大 微服务架构的优势 每个微服务是一个小的完整单位 独立的代码库数据库 自己去快速迭代功能 快速迭代 快速回滚 资源利用大大提高 大幅降低协作成本 高可用
  • 链表 -- 算法 -- leetcode

    翻转链表前n个节点 虚拟头结点的使用情况 链表的首节点可能发生改变 虚拟头结点 ret gt next head 力扣 力扣 力扣 力扣 力扣 力扣 力扣 力扣 力扣
  • 期望/方差/协方差/相关系数

    期望 在概率论和统计学中 数学期望 mean 或均值 亦简称期望 是试验中每次可能结果的概率乘以其结果的总和 是最基本的数学特征之一 它反映随机变量平均取值的大小 离散型随机变量的一切可能的取值Xi与对应的概率p xi 乘积之和称为该离散型
  • 会员ID查询测试用例设计

    检查点 默认值检查 异常输入 查询结果检查 正常输入 查询结果检查 测试用例设计 1 前提 存在会员ID abc abcd 1abc 会员id输入为字母abc 其它默认 点击 搜索 显示完全匹配该条件的数据 即只显示会员ID abc的记录
  • linux 线程

    1 线程概述 与进程的区别及线程的优势 什么是线程 在一个程序里的一个执行路线就叫做线程 thread 更准确的定义是 线程是 一个进程内部的控制序列 一切进程至少都有一个执行线程 线程是进程内部的一条执行序列或执行路径 即一个可调度的实体
  • 读书小记--<态度>

    前言 前段时间再读了吴军老师的 态度 分享的是和女儿的日常书信 觉得收获很多 同事推荐他的 浪潮之巅 数学之美 系列书籍 下面是个人的觉得认同或值得深入学习的一些点 特此记录一下 态度决定命运 文中写道撒切尔夫人的一句话 注意你的想法 因为
  • 前端调用高德地图的接口

  • 如何查看linux内核

    这本阿里P8撰写的算法笔记 再次推荐给大家 身边不少朋友学完这本书最后加入大厂 Github 疯传 史上最强悍 阿里大佬 LeetCode刷题手册 开放下载了 如何查看linux内核版本 第一种 登录linux 在终端输入 cat proc
  • 【机器学习】几种常见的概率分布

    之前你已经了解概率的基础知识 如果还不知道概率能干啥 在生活中有哪些应用的例子 可以看我这个 人工智能时代 用概率思维发现人生机会 www zhihu com 今天我们来聊聊几种特殊的概率分布 这个知识目前来看 还没有人令我满意的答案 因为
  • 常用的shell脚本

    1 脚本之间传递参数 1 sh 的脚本 接受参数 如下 如果有一个参数则赋值个sourceFile这个变量 否则用默认值 Shell代码 bin bash LANG en US UTF 8 get parameters sourceFile
  • 关于SSM 项目 tomcat无休止启动的问题记录

    起初很懵逼 然后一想就知道了 可能是刚写的sql除了问题 原sql SELECT FROM A WHERE DATEDIFF add time NOW lt 0 改后sql SELECT FROM tb order WHERE DATEDI
  • SpringCloud Gateway + Nacos 多模块下整合swagger2

    前言 我们经常在springboot单体项目中 集成swagger来整合接口文档 但是在微服务springcloud项目下 业务模块众多 如果再像之前一样单独访问每个模块的 swagger ui html 则非常麻烦 怎么解决呢 既然我们已
  • 本周新出计算机视觉开源代码汇总(语义分割、目标检测、超分辨率、网络结构设计、训练策略等)

    CV君汇总了过去一周计算机视觉领域新出的开源代码 涉及到图像增广 医学图像分割 图像恢复 目标检测 语义分割 超分辨率 显著目标检测 轻量级网络结构设计 网络规范化 标注工具等 其中有多篇来自CVPR 2019与ICML 2019的论文代码
  • COBOL

    一 COBOL简介 COBOL Common Business Oriented Language 面向过程的高级程序设计语言 二 COBOL语法格式 COBOL程序的每行代码通常分为80列 有非标准的80列可以超过80列 写多少列都可以
  • 【1】python爬虫入门,利用bs4以及requests获取静态网页

    注 本文仅适用于爬虫初级入门者 并不涉及太多技术本质 感谢您阅读此文 最近放假在家 闲时无聊 开始入门了python爬虫 可以完成一些基本的数据爬取 对于一些反爬取例如JS渲染 接口加密等页面仍然处于学习之中 本文就是简单总结最近已熟练掌握
  • PHP实现 美化 打赏点 金额 换算

    方法 function PointConversion je jenum strlen je echo substr je 0 1 万 if jenum 5 jv1 substr je 0 1 jv2 je 1 str jv2 0 jv1
  • mysql workbench使用存储过程

    MySQL 使用存储过程 先来了解一下什么是mysql的存储过程 Mysql存储过程是一个可编程的函数 它在数据库中创建并保存 它可以有SQL语句和一些特殊的控制结构组成 当希望在不同的应用程序或平台上执行相同的函数 或者封装特定功能时 存