数据库系列MySQL:存储过程

# 创建一个名为ShowStu的存储过程,查询student表的内容
delimiter // 
create PROCEDURE ShowStu()
begin
select * from student;
end//
delimiter ;call ShowStu();# 存储过程的参数
1. IN输入参数  表示调用者向过程传入值(传入值可以是字面量或变量),默认是IN输入参数,如果不填写,就是默认的IN输入参数
# 用于查询指定姓名的学生信息
delimiter // 
create PROCEDURE GetNameByStu(in name varchar(50))
begin
select * from student where stuName=name;
end//
delimiter ;call GetNameByStu('李四');2. OUT输出参数  表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)
# 查询指定姓名的学生学号。
delimiter // 
create PROCEDURE GetIDByName(in name varchar(50),out id int)
begin
select stuID into id from student where stuName=name;
end//
delimiter ;call GetIDByName('王五',@sid);
select @sid;# 查询指定课程名称的课程编号和课程学时。
delimiter // 
create PROCEDURE GetIDAndHoursByName(in name varchar(50),out id int,out hours int)
begin
select couID,couHours into id,hours from courses where couName=name;
end//
delimiter ;call GetIDAndHoursByName('大学英语',@id,@hours);
select @id;
select @hours;3. INOUT修改传入参数值
# 传入学生名字,使用“-”拼接学号,并传入一个月的薪水值,输出年薪。
delimiter //
create PROCEDURE GetSalaryByName(inout sname varchar(50) ,inout salary float)
begin
select concat(stuID,"-",stuName) into sname from student where stuName=sname;
set salary=salary*12;
end//
delimiter ;set @sname='王五';
set @salary=4000.5;
call GetSalaryByName(@sname,@salary);
select @sname;
select @salary;# 存储过程中的流程控制
1. 分支控制语句
# 使用多分支控制语句实现传入整型数字0,1,2,输出周日,周一,周二,如果传入其他数字则输出无效日期
delimiter //
create PROCEDURE `weekchoose`(in `day` int)
BEGIN
if `day`=0 THENselect '星期天';
elseif `day`=1 THENselect '星期一';
elseif `day`=2 THENselect '星期二';
ELSEselect '无效日期';
end if;
end//
delimiter ;call weekchoose(2);# 向student表中插入一条信息,判断学号是否存在,如果存在则提示“学号已存在,不能添加”,否则向数据库添加一条数据,提示“数据添加成功”
DELIMITER $$
CREATE PROCEDURE `InsertTostudent`(IN stu_id int,IN stu_name varchar(20),OUT s_result VARCHAR(20))BEGIN-- 声明一个变量 用来决定学号是否已经存在DECLARE s_count INT DEFAULT 0;-- 验证这么名字是否已经存在SELECT COUNT(*) INTO s_count FROM student WHERE `stuID` = stu_id;    IF s_count = 0 THENINSERT INTO student(`stuID`, `stuName`) VALUES(stu_id, stu_name);SET s_result = '数据添加成功';ELSESET s_result = '学号已存在,不能添加';SELECT s_result;END IF;END$$
DELIMITER ;call InsertTostudent(1010,'李红',@s_result);
SELECT @s_result;call InsertTostudent(1011,'李红',@s_result);
SELECT @s_result;2. 条件控制语句case
# 使用case条件控制语句实现
delimiter //
create PROCEDURE `weekchoose2`(in `day` int)
BEGIN
case `day`
when 0 THENselect '星期天';
when 1 THENselect '星期一';
when 2 THENselect '星期二';
ELSEselect '无效日期';
end case;
end//
delimiter ;call weekchoose2(2);2. while循环语句
# 使用while循环实现传入小于0的整数i,输出i+1到10的和
delimiter //
CREATE PROCEDURE `sum`(in i int,out sum int)
BEGINset sum=0;
while i<10 DOset i=i+1;set sum=sum+i;
end while;
end//
delimiter ;call `sum`(0,@s);
select @s;# 在students数据库中创建一个名为test的表,字段为id int PRIMARY key,tname varchar(50) not null,time TIMESTAMP DEFAULT now(),使用while循环向test表中插入10万条数据。
use students;
create table test
(
id int PRIMARY key,
tname varchar(50) not null,
time TIMESTAMP DEFAULT now()
);delimiter //
create PROCEDURE `InsertTotest`()
BEGIN
DECLARE i int DEFAULT 1;
while i<=100000 DOinsert into `students`.`test`(id,tname) values(i,'张三');set i=i+1;
end while;
end//
delimiter ;call InsertTotest();

做测试的建表参数

create table if not EXISTS student
(stuID  int(5)  not null primary key,stuName  varchar(50)  not null,stuSex CHAR(10),stuAge smallint
);CREATE TABLE if not EXISTS courses(couID int  not null primary key auto_increment COMMENT '学号',couName varchar(50) not null DEFAULT('大学英语'),couHours  smallint UNSIGNED COMMENT '学时',couCredit  float DEFAULT(2) COMMENT '学分'
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE  utf8mb4_0900_ai_ci;CREATE TABLE if not EXISTS stu_cou(ID int not null primary key auto_increment,stuID int(5)  not null  COMMENT '学号',couID int  not null  COMMENT '课程编号',time timestamp not null DEFAULT(now())
);/*添加外键约束*/alter table stu_cou add CONSTRAINT fk_stuid foreign key(stuID) REFERENCES student(stuID) ON UPDATE CASCADE ON DELETE CASCADE ;alter table stu_cou add CONSTRAINT fk_couid foreign key(couID) REFERENCES courses(couID) ON UPDATE CASCADE ON DELETE CASCADE ;/*插入数据*/insert into student(stuID,stuName,stuSex,stuAge) values(1001,'张三','男',19),(1002,'李四','男',18),(1003,'王五','男',18),(1004,'丽丽','女',18),(1005,'李仁','女',19),(1006,'张敏','女',18); insert into student VALUES(1007,'五条人','男',20),(1008,'五伍','女',19);insert into courses(couID,couName,couHours,couCredit) values(50,'大学英语',64,2),(60,'计算机基础',78,2.5),(70,'Java程序设计',108,6),(80,'数据库应用',48,2.5);insert into stu_cou(stuID,couID) values(1001,50),(1001,60),(1001,70),(1001,80),(1002,50),(1002,60),(1002,70),(1002,80),(1003,50),(1003,60),(1003,70),(1003,80),(1004,50),(1004,60),(1004,70),(1004,80),(1005,50),(1005,60),(1005,70),(1005,80),(1006,50),(1006,60),(1006,70),(1006,80);alter table stu_cou add COLUMN grade FLOAT null;
UPDATE stu_cou set grade=(SELECT FLOOR(50 +RAND() * 50));alter table student add COLUMN stuColleage varchar(100) null;
update student set stuColleage='大数据学院' where stuID BETWEEN 1001 and  1003;
update student set stuColleage='物流学院' where stuID BETWEEN 1004 and  1006;
update student set stuColleage='康养学院' where stuID BETWEEN 1007 and  1008;alter table courses add COLUMN couColleage varchar(50) null;update courses set couColleage='通识教育学院' where couName='大学英语';
update courses set couColleage='通识教育学院' where couName='计算机基础';
update courses set couColleage='大数据学院' where couName='Java程序设计';
update courses set couColleage='大数据学院' where couName='数据库应用';insert into courses values(90,'大学体育',56,1.5,'通识教育学院'),(100,'Android程序设计',92,5,'大数据学院'),(101,'大学物理',48,2,'通识教育学院');insert into stu_cou(stuID,couID,grade) values(1007,50,86),(1007,60,71),(1008,70,56),(1008,80,63);
insert into student VALUES(1009,'小小','男',17,'物流学院'),(1010,'大大','女',21,'大数据学院');

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

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

相关文章

职场日常英语口语,成人英语培训学校,柯桥学英语推荐哪里

“玩手机”用英语怎么说&#xff1f;你的第一反应是不是&#xff1a;play the phone&#xff1f; 在英语中&#xff0c;play这个动词通常表示“玩耍、娱乐、操纵”等意思&#xff0c;而手机是一种工具&#xff0c;不是玩耍的对象。 换句话说&#xff0c;我们“玩手机”&#xf…

主食冻干哪款好?十大放心主食冻干名单推荐

作为养猫的人&#xff0c;我们都知道每天最担心的事情就是如何为心爱的猫咪选择一款高品质的猫粮。我们都希望为猫咪提供最好的营养&#xff0c;让它们健康快乐地成长。然而&#xff0c;近期的一些事件&#xff0c;如百利猫粮生虫和VE主食冻干掰开有虫&#xff0c;让我们不得不…

软件测试|Windows系统配置pytest+allure环境教程

前言 allure可以输出非常精美的测试报告&#xff0c;也可以和pytest进行完美结合&#xff0c;不仅可以渲染页面&#xff0c;还可以控制用例的执行。本文我们将介绍Windows系统中如何配置allure环境。 第一步&#xff1a;配置Java环境 因为allure的运行依赖于Java环境&#x…

Spring Security介绍

一、Spring Security&#xff1a; 1、简介&#xff1a;Spring Security 是一个非常流行和成功的 Java 应用开发框架。Spring Security 基于 Spring 框架&#xff0c;提供了一套 Web 应用安全性的完整解决方案。一般来说&#xff0c;Web 应用的安全性包括用户认证&#xff08;A…

vue3引用类型和基础类型深度克隆

深度克隆失效的一个例子 import { cloneDeep } from "lodash"; import { ref } from "vue";const navArr ref(["recommend","hot","new", ]) const list1: any ref([]) const list2: any ref([]) const list3: any ref(…

【Leetcode】15. 三数之和

【Leetcode】15. 三数之和 题目链接思路代码 题目链接 【Leetcode】15. 三数之和 思路 排序双指针去重 代码 func threeSum(nums []int) [][]int {// 切片升序排序sort.Slice(nums, func(i, j int) bool {return nums[i] < nums[j]})// 结果切片ans : [][]int{}n : len(n…

如何设置电脑桌面提醒,电脑笔记软件哪个好?

对于大多数上班族来说&#xff0c;每天要完成的待办事项实在太多了&#xff0c;如果不能及时去处理&#xff0c;很容易因为各种因素导致忘记&#xff0c;从而给自己带来不少麻烦。所以&#xff0c;我们往往会借助一些提醒类的软件将各项任务逐一记录下来&#xff0c;然后设置上…

微前端理论

学习微前端时&#xff0c;有几个核心概念和技术点是必须要理解和掌握的&#xff1a; 微前端架构&#xff1a; 微前端是一种将大型单体应用拆分为多个小型前端应用&#xff0c;每个应用可以独立开发、部署和升级&#xff0c;最后通过某种集成方式统一呈现给用户的前端架构模式。…

手持终端PDA定制厂家_5G安卓手持机设备/条形码扫描手持机PDA

手持终端PDA是一种功能强大的手持终端设备&#xff0c;具备一维码和二维码扫描功能&#xff0c;广泛应用于门票管理、零售、智能巡检、仓储物资管理、金融、快递等领域。 这款手持终端基于MT6877方案&#xff0c;搭载八核处理器(2xCortex-A78 2.4GHz 6xCortex-A55 2.0GHz)&…

高速PCB设计10大要点总结

学习高速PCB设计&#xff0c;掌握这10个知识点很重要&#xff01; 在高速PCB设计的学习中&#xff0c;有很多的知识点需要大家去了解和掌握&#xff0c;比如常见的信号完整性、反射、串扰、电源噪声、滤波等。本文和大家分享10个和高速PCB设计相关的重要知识&#xff0c;希望对…

ChatGPT4+Python近红外光谱数据分析及机器学习与深度学习建模进阶应用

2022年11月30日&#xff0c;可能将成为一个改变人类历史的日子——美国人工智能开发机构OpenAI推出了聊天机器人ChatGPT3.5&#xff0c;将人工智能的发展推向了一个新的高度。2023年4月&#xff0c;更强版本的ChatGPT4.0上线&#xff0c;文本、语音、图像等多模态交互方式使其在…

React16源码: React中的setState和forceUpdate源码实现

setState 和 forceUpdate 1 &#xff09; 概述 通过 class component 内部的 setState&#xff0c;以及 forceUpdate 去更新一个组件的过程在react的应用当中&#xff0c;我们只有 ReactDOM.render setState&#xff0c;以及 forceUpdate这几种种方式去更新react的应用是合理…

【Linux】修改Linux远程登录用户并授权,禁止root远程登录,修改Linux登录端口

一、修改Linux远程登录用户并授权 添加一个新的普通用户 用如下命令 adduser newuser 修改密码 passwd newuser 根据提示 输入密码 赋予newuser root 权限 修改 /etc/sudoers 文件 找到如下一行 &#xff0c;取消注释 ##Allows people in group wheel to run all commands %wh…

C# 学习笔记2-控制流与类型转换

控制流与类型转换 关于变量的简单操作判断循环类型转换异常处理检查数字类型的溢出 变量操作 一元运算符 Unary operators x&#xff0c;x&#xff0c;x--&#xff0c;--x。 这些运算符同 C。 postfix operator 后置运算符 还有 typeof(int)&#xff0c;sizeof(int)。 …

最新GPT4、AI绘画、DALL-E3文生图模型教程,GPT语音对话使用,ChatFile文档对话总结

一、前言 ChatGPT3.5、GPT4.0、GPT语音对话、Midjourney绘画&#xff0c;文档对话总结DALL-E3文生图&#xff0c;相信对大家应该不感到陌生吧&#xff1f;简单来说&#xff0c;GPT-4技术比之前的GPT-3.5相对来说更加智能&#xff0c;会根据用户的要求生成多种内容甚至也可以和…

【轮式移动机器人课程笔记 5】运动学仿真

L5 运动学仿真 本节重点&#xff1a; 如何理解推导出的运动学模型 回顾&#xff1a;机器人运动学模型 正向&#xff08;前向&#xff09;运动学模型反向运动学模型 基于MatLab运动学仿真 本节重点&#xff0c;如何利用matlab对运动学进行仿真 5.1 回顾运动学模型 [ x ˙ y …

离线AI聊天清华大模型(ChatGLM3)本地搭建

在特定的情况下&#xff0c;要保证信息安全的同时还能享受到AIGC大模型带来的乐趣和功能&#xff0c;那么&#xff0c;离线部署就能帮助到你&#xff0c;最起码&#xff0c;它是一个真正可用的方案。 大模型本身清华的 (ChatGLM3)&#xff0c;为的是对中文支持友好&#xff0c…

kotlin的接口详解

在 Kotlin 中&#xff0c;接口&#xff08;Interface&#xff09;是一种定义了一组方法的抽象类型。与类不同&#xff0c;接口不能包含状态或字段。接口中的方法可以有默认实现&#xff0c;也可以是抽象的需要在实现类中提供具体实现的方法。 为什么要使用接口&#xff1f; 多…

2696. 删除子串后的字符串最小长度 --力扣 --JAVA

题目 给你一个仅由 大写 英文字符组成的字符串 s 。 你可以对此字符串执行一些操作&#xff0c;在每一步操作中&#xff0c;你可以从 s 中删除 任一个 "AB" 或 "CD" 子字符串。 通过执行操作&#xff0c;删除所有 "AB" 和 "CD" 子串&a…

pythonnumpy十三:借助numpy解方程

使用NumPy进行解方程可以涉及线性方程组和非线性方程的求解。下面将给出详细的示例&#xff1a; 1.解线性方程组&#xff1a; 考虑以下线性方程组&#xff1a; 2x 3y 6 4x 5y 7我们可以使用NumPy的linalg.solve()函数求解该线性方程组。 import numpy as np# 定义系数矩…