Mysql8.0习题系列(六):存储过程(一篇学习存储过程做题,超详细)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: Mysql8.0习题系列(六):存储过程(一篇学习存储过程做题,超详细)

Mysql8.0习题系列

软件下载地址
提取码:7v7u
数据下载地址
提取码:e6p9


0.准备工作

CREATE DATABASE test15_pro_func;
USE test15_pro_func;
1. 创建存储过程insert_user(),实现传入用户名和密码,插入到admin表中
CREATE TABLE admin(
id INT PRIMARY KEY AUTO_INCREMENT,
user_name VARCHAR(15) NOT NULL,
pwd VARCHAR(25) NOT NULL
);

2. 创建存储过程get_phone(),实现传入女神编号,返回女神姓名和女神电话
CREATE TABLE beauty(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(15) NOT NULL,
phone VARCHAR(15) UNIQUE,
birth DATE
);
INSERT INTO beauty(NAME,phone,birth)
VALUES
('朱茵','13201233453','1982-02-12'),
('孙燕姿','13501233653','1980-12-09'),
('田馥甄','13651238755','1983-08-21'),
('邓紫棋','17843283452','1991-11-12'),
('刘若英','18635575464','1989-05-18'),
('杨超越','13761238755','1994-05-11');
SELECT * FROM beauty;

1. 创建存储过程insert_user(),实现传入用户名和密码,插入到admin表中

CREATE TABLE admin(
id INT PRIMARY KEY AUTO_INCREMENT,
user_name VARCHAR(15) NOT NULL,
pwd VARCHAR(25) NOT NULL
);
DROP PROCEDURE insert_user;
DELIMITER $;
CREATE PROCEDURE insert_user(IN username VARCHAR(15),IN pass_word VARCHAR(20))
BEGIN
INSERT INTO admin(user_name,pwd) VALUES (username, pass_word);
END $;
DELIMITER ;

CALL insert_user('YOYO',123);
SELECT * FROM admin;

2. 创建存储过程get_phone(),实现传入女神编号,返回女神姓名和女神电话

CREATE TABLE beauty(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(15) NOT NULL,
phone VARCHAR(15) UNIQUE,
birth DATE
);
INSERT INTO beauty(NAME,phone,birth)
VALUES
('朱茵','13201233453','1982-02-12'),
('孙燕姿','13501233653','1980-12-09'),
('田馥甄','13651238755','1983-08-21'),
('邓紫棋','17843283452','1991-11-12'),
('刘若英','18635575464','1989-05-18'),
('杨超越','13761238755','1994-05-11');
SELECT * FROM beauty;

DROP PROCEDURE get_phone;
DELIMITER $;
CREATE PROCEDURE get_phone(IN id INT,OUT out_name VARCHAR(20),OUT out_phone VARCHAR(15))
BEGIN
SELECT NAME, phone INTO out_name, out_phone
FROM beauty b
WHERE b.id = id;
END $;
DELIMITER ;
CALL get_phone(1,@out_name,@out_phone);
SELECT @out_name, @out_phone;

3. 创建存储过程date_diff(),实现传入两个女神生日,返回日期间隔大小

方法一

DROP PROCEDURE date_diff;
DELIMITER $;
CREATE PROCEDURE date_diff(IN bth1 DATETIME, IN bth2 DATETIME)
BEGIN
DECLARE data_diff INT; # 定义接受日期间隔的变量
SET data_diff = DATEDIFF(bth1,bth2); # 计算生日间隔
SELECT data_diff; # 查询生日间隔
END $;
DELIMITER ;
CALL date_diff('2018-08-15','2008-10-15');

方法二

DROP PROCEDURE date_diff;
DELIMITER $;
CREATE PROCEDURE date_diff(IN bth1 DATETIME, IN bth2 DATETIME, OUT result INT)
BEGIN
SELECT DATEDIFF(bth1, bth2) INTO result; 
END $;
DELIMITER ;
CALL date_diff('2018-08-15','2008-10-15',@result);
SELECT @result;

4. 创建存储过程format_date(),实现传入一个日期,格式化成xx年xx月xx日并返回

DROP PROCEDURE format_date ;
DELIMITER $;
CREATE PROCEDURE format_date(IN indate DATETIME, OUT outdate VARCHAR(50) )
BEGIN
SELECT DATE_FORMAT(indate, "%y年%m月%d日") INTO outdate;
END $;
DELIMITER ;

CALL format_date('2000-05-25', @outdate);
SELECT @outdate;

5. 创建存储过程beauty_limit(),根据传入的起始索引和条目数,查询女神表的记录

DROP PROCEDURE beauty_limit ;
DELIMITER $;
CREATE PROCEDURE beauty_limit(IN idx INT, IN num INT )
BEGIN
SELECT * FROM beauty
LIMIT idx, num;
END $;
DELIMITER ;

CALL beauty_limit(1,2)

创建带inout模式参数的存储过程

6. 传入a和b两个值,最终a和b都翻倍并返回

DELIMITER $;
CREATE PROCEDURE double_num(INOUT a INT, INOUT b INT)
BEGIN
SET a = a*2;
SET b = b*2; 
END $;
DELIMITER ;
SET @a = 3;
SET @b = 2;
CALL double_num(@a,@b);
SELECT @a, @b;

7. 删除题目5的存储过程

DROP PROCEDURE beauty_limit;

8. 查看题目6中存储过程的信息

SHOW PROCEDURE STATUS LIKE 'add_double';
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
25天前
|
SQL 关系型数据库 MySQL
Mysql基础学习day02-作业
本教程介绍了数据库表的创建与管理操作,包括创建员工表、插入测试数据、删除记录、更新数据以及多种查询操作,涵盖了SQL语句的基本使用方法,适合初学者学习数据库操作基础。
52 0
|
25天前
|
SQL 关系型数据库 MySQL
Mysql基础学习day03
本课程为MySQL基础学习第三天内容,主要讲解多表关系与多表查询。内容涵盖物理外键与逻辑外键的区别、一对多、一对一及多对多关系的实现方式,以及内连接、外连接、子查询等多表查询方法,并通过具体案例演示SQL语句的编写与应用。
40 0
|
19天前
|
关系型数据库 MySQL 数据管理
Mysql基础学习day03-作业
本内容包含数据库建表语句及多表查询示例,涵盖内连接、外连接、子查询及聚合统计,适用于员工与部门数据管理场景。
27 1
|
1月前
|
SQL 关系型数据库 MySQL
Mysql基础学习day01
本课程为MySQL基础学习第一天内容,涵盖MySQL概述、安装、SQL简介及其分类(DDL、DML、DQL、DCL)、数据库操作(查询、创建、使用、删除)及表操作(创建、约束、数据类型)。适合初学者入门学习数据库基本概念和操作方法。
132 6
|
28天前
|
SQL 关系型数据库 MySQL
Mysql基础学习day01-作业
本教程包含三个数据库表的创建练习:学生表(student)要求具备主键、自增长、非空、默认值及唯一约束;课程表(course)定义主键、非空唯一字段及数值精度限制;员工表(employee)包含自增主键、非空字段、默认值、唯一电话号及日期时间类型字段。每个表的结构设计均附有详细SQL代码示例。
49 0
|
29天前
|
SQL 关系型数据库 MySQL
Mysql基础学习day02
本课程为MySQL基础学习第二天内容,涵盖数据定义语言(DDL)的表查询、修改与删除操作,以及数据操作语言(DML)的增删改查功能。通过具体SQL语句与实例演示,帮助学习者掌握MySQL表结构操作及数据管理技巧。
79 0
|
8月前
|
存储 Java 关系型数据库
java调用mysql存储过程
在 Java 中调用 MySQL 存储过程主要借助 JDBC(Java Database Connectivity)。其核心原理是通过 JDBC 与 MySQL 建立连接,调用存储过程并处理结果。具体步骤包括:加载 JDBC 驱动、建立数据库连接、创建 CallableStatement 对象、设置存储过程参数并执行调用。此过程实现了 Java 程序与 MySQL 数据库的高效交互。
|
12月前
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
123 3
|
10月前
|
SQL 存储 关系型数据库
【MySQL基础篇】全面学习总结SQL语法、DataGrip安装教程
本文详细介绍了MySQL中的SQL语法,包括数据定义(DDL)、数据操作(DML)、数据查询(DQL)和数据控制(DCL)四个主要部分。内容涵盖了创建、修改和删除数据库、表以及表字段的操作,以及通过图形化工具DataGrip进行数据库管理和查询。此外,还讲解了数据的增、删、改、查操作,以及查询语句的条件、聚合函数、分组、排序和分页等知识点。
828 55
【MySQL基础篇】全面学习总结SQL语法、DataGrip安装教程
|
7月前
|
存储 关系型数据库 MySQL
【YashanDB知识库】MySQL返回结果集的存储过程的改写方法
本文介绍了将MySQL存储过程改写至YashanDB的解决方案。由于MySQL存储过程可直接返回结果集,而YashanDB需通过返回SYS_REF_CURSOR的函数实现类似功能,因此需要对代码进行转换。示例中展示了如何将MySQL存储过程`proc1`改写为YashanDB函数,并调整JDBC应用代码以适配REF_CURSOR输出参数,从而正确获取查询结果。此方法确保了跨数据库场景下的兼容性与功能性。

推荐镜像

更多