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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: Mysql8.0习题系列(六):存储过程(一篇学习存储过程做题,超详细)

Mysql8.0习题系列

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


@TOC


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';
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
15天前
|
存储 SQL 关系型数据库
轻松入门MySQL:加速进销存!利用MySQL存储过程轻松优化每日销售统计(15)
轻松入门MySQL:加速进销存!利用MySQL存储过程轻松优化每日销售统计(15)
|
存储 关系型数据库 MySQL
|
1月前
|
存储 关系型数据库 MySQL
Mysql基础第二十六天,使用存储过程
Mysql基础第二十六天,使用存储过程
28 0
Mysql基础第二十六天,使用存储过程
|
1月前
|
SQL 存储 关系型数据库
【MySQL 数据库】11、学习 MySQL 中的【锁】
【MySQL 数据库】11、学习 MySQL 中的【锁】
76 0
|
1月前
|
存储 SQL 关系型数据库
【MySQL 数据库】9、存储过程
【MySQL 数据库】9、存储过程
202 0
|
存储 关系型数据库 MySQL
|
1月前
|
SQL 关系型数据库 MySQL
【MySQL 数据库】4、MySQL 事务学习
【MySQL 数据库】4、MySQL 事务学习
44 0
|
10天前
|
SQL 存储 关系型数据库
6本值得推荐的MySQL学习书籍
本文是关于MySQL学习书籍的推荐,作者在DotNetGuide技术社区和微信公众号收到读者请求后,精选了6本值得阅读的MySQL书籍,包括《SQL学习指南(第3版)》、《MySQL是怎样使用的:快速入门MySQL》、《MySQL是怎样运行的:从根儿上理解MySQL》、《深入浅出MySQL:数据库开发、优化与管理维护(第3版)》以及《高性能MySQL(第4版)》和《MySQL技术内幕InnoDB存储引擎(第2版)》。此外,还有12本免费书籍的赠送活动,涵盖《SQL学习指南》、《MySQL是怎样使用的》等,赠书活动有效期至2024年4月9日。
|
15天前
|
SQL 关系型数据库 MySQL
轻松入门MySQL:深入学习数据库表管理,创建、修改、约束、建议与性能优化(3)
轻松入门MySQL:深入学习数据库表管理,创建、修改、约束、建议与性能优化(3)
|
存储 SQL 关系型数据库