mysql storage_mySQL__storage课堂笔记和练习
#存储过程和函数
/*
存储过程和函数类似于Java中的方法
好处:
1、提高代码重用性
2、简化操作
*/
#存储过程
/*
含义:一组编译好的SQL语句的集合,理解成批处理语句
1、提高代码的重用性
2、简化操作
3、减少了编译次数
4、减少了和数据库服务器连接次数,提高了效率
*/
#一、创建
CREATE PROCEDURE 存储过程名(参数列表)
BEGIN
存储过程体(一组合法的SQL语句)
END
注意:
1、参数列表包含3个部分
参数模式 参数名 参数类型
举例:
IN stuname VARCHAR(20)
参数模式:
IN:修饰的参数可以作为入口,也就是说该参数需要调用方传入值
OUT:修饰的参数可以作为出口,也就是说该参数可以作为返回值
INOUT:修饰的参数可以作为出口/入口,既可以传入值又可以返回值
2、如果存储过程体仅仅只有1句话,BEGIN END可以省略
3、存储过程体中的每条SQL语句的结尾要求必须加分号,
存储过程的结尾可以使用DELIMITER重新设置
语法:
DELIMITER 结束标记
案例:
DELIMITER $
#二、调用
CALL 存储过程名(实参列表);
#1、空白列表
#案例:插入到admin表中5条记录
SELECT * FROM admin;
#设置结束标志
DELIMITER $
#定义
CREATE PROCEDURE myp1()
BEGIN
INSERT INTO admin(username,`password`)
VALUES('john1','0000'),('lily','0000'),('rose','0000'),('jack','0000'),('tom','0000');
END $
#如果SQLyog中运行不了,就粘贴到cmd打开girls数据库,再运行
#调用
CALL myp1()$#之后结束符号都不是;了,都换成$
SELECT * FROM admin$
#如果SQLyog中运行不了,就粘贴到cmd打开girls数据库,再运行
#2、创建带in模式参数的存储过程
#案例1:创建存储过程实现,根据女神名查询对应的男神信息
#IN 可以省略,但是不建议
#定义
CREATE PROCEDURE myp2(IN beautyName VARCHAR(20))
BEGIN
SELECT bo.*
FROM boys bo
RIGHT JOIN beauty b ON bo.id = b.boyfriend_id
WHERE b.name=beautyName;
END$
#调用
CALL myp2('宋茜')$
#如果出现报错: Incorrect string value: '\xC1\xF8\xD1\xD2' for column 'beautyName' at row 8
#说明是字符集的问题,这时要重新设置一下字符集
SET NAMES gbk$
CALL myp2('宋茜')$#不报错了
#案例2:创建存储过程实现,用户登陆是否成功
#定义
CREATE PROCEDURE myp5(IN username VARCHAR(20),IN PASSWORD VARCHAR(20))
BEGIN
#声明变量,存放存储结果
DECLARE result INT DEFAULT 0;#声明并初始化
#赋值
SELECT COUNT(*) INTO result
FROM admin
WHERE admin.`username`=username
AND admin.`password`=PASSWORD;
#使用
SELECT IF(result>0,'成功','失败');
END$
#调用
CALL myp5('张飞','8888')$
#3、创建带out模式的存储过程
#案例1:根据女神名,返回对应的男神名
CREATE PROCEDURE myp6(IN beautyName VARCHAR(20),OUT boyname VARCHAR(20))
BEGIN
SELECT bo.boyName INTO boyName
FROM boys bo
INNER JOIN beauty b ON b.boyfriend_id=bo.id
WHERE b.name=beautyName;
END$
#调用
#第二个参数就是一个变量,不需要有值,用于接收返回值
SET @bName$#定义一个用户变量,甚至可以不定义,直接用@bName
CALL myp6('宋茜',@bName)$
SELECT @bName$#这就是男神名
#案例2:根据女神名,返回对应的男神名和男神的魅力值
CREATE PROCEDURE myp7(IN beautyName VARCHAR(20),OUT boyName VARCHAR(20),OUT userCP INT)
BEGIN
SELECT bo.boyName,bo.userCP INTO boyName,userCP
FROM boys bo
INNER JOIN beauty b ON b.boyfriend_id=bo.id
WHERE b.name=beautyName;
END$
#调用
CALL myp7('宋茜',@bName,@usercp)$
SELECT @bName,@usercp$
#4、创建带有inout模式参数的存储过程
#案例1:传入a和b两个值,最终a和b都翻倍并返回
CREATE PROCEDURE myp8(INOUT a INT, INOUT b INT)
BEGIN
SET a=a*2;
SET b=b*2;
END$
#调用
#注意:不可以直接往存储过程中传常数,如果传常数,返回的值将没有位置放
#因此在调用之前,必须要先定义两个有值的变量
SET @m=10$
SET @n=20$
CALL myp8(@m,@n)$
SELECT @m,@n$
#三、存储过程的删除
/*
语法:drop procedure 存储过程名称
说明:每次只能删除一个【在SQLyog中就可以运行】
*/
DROP PROCEDURE test_prop3;
#四、查看存储过程信息
SHOW CREATE PROCEDURE myp2;
#desc myp2是错误写法
#【练习】
#练习1:创建存储过程,实现传入用户名和密码,插入到admin表中
CREATE PROCEDURE test_pro1(IN username VARCHAR(20),IN loginPwd VARCHAR(20))
BEGIN
INSERT admin(admin.username,PASSWORD)
VALUES(userName,loginPwd);
END;$#这里也可以加个分号
CALL test_pro1('admin','0000')$
SELECT * FROM admin$
#练习2:创建存储过程实现传入女神编号,返回女神名称和女神电话
CREATE PROCEDURE test_pro2(IN id INT, OUT `name` VARCHAR(20) , OUT phone VARCHAR(20))
BEGIN
SELECT b.name,b.phone INTO `name`,phone
FROM beauty b
WHERE b.id=id;
END$
CALL test_pro2(7,@n,@p)$
SELECT @n,@p$
#练习3:创建存储过程或函数实现传入两个女神生日,返回大小
CREATE PROCEDURE test_pro3(IN birth1 DATETIME, IN birth2 DATETIME,OUT result INT)
BEGIN
SELECT DATEDIFF(birth1,birth2) INTO result;
END$
CALL test_pro3('1998-1-1',NOW(),@result)$
SELECT @result$
#练习4:创建存储过程或函数实现传入一个日期,格式化成xx年xx月xx日并返回
CREATE PROCEDURE test_pro4(IN mydate DATETIME,OUT strDate VARCHAR(50))
BEGIN
SELECT DATE_FORMAT(mydate,'%y年%m月%d日') INTO strDate;
#DATE_FORMAT将日期转换为字符串并且返回一个字符串
END$
CALL test_pro4(NOW(),@str)$
SELECT @str$
#练习5:创建存储过程或函数实现传入女神名称,返回:女神 and 男神 格式的字符串
CREATE PROCEDURE test_pro5(IN beautyName VARCHAR(20),OUT str VARCHAR(50))
BEGIN
SELECT CONCAT(beautyName,' and ',IFNULL(boyName,'null')) INTO str
FROM boys bo
RIGHT JOIN beauty b ON b.boyfriend_id=bo.id
WHERE b.name=beautyName;
END$
CALL test_pro5('宋茜',@str)$
SELECT @str$
#练习6:创建存储过程函数,根据传入的条目数和起始索引,查询beauty表的记录
CREATE PROCEDURE test_pro6(IN startIndex INT, IN size INT)
BEGIN
SELECT * FROM beauty LIMIT startIndex,size;
END$
CALL test_pro6(1,2)$#索引和id无关
mysql storage_mySQL__storage课堂笔记和练习相关推荐
- mysql day01课堂笔记
mysql day01课堂笔记 1.什么是数据库?什么是数据库管理系统?什么是SQL?他们之间的关系是什么? 数据库:英文单词DataBase,简称DB.按照一定格式存储数据的一些文件的组合.顾名思义 ...
- mysql 学习课堂笔记 第二天(值得学习、收藏!)
笔记来自b站 老杜带你学_mysql入门基础(mysql基础视频+数据库实战)很棒的mysql讲解,建议观看. 话不多说,开始笔记 一共四天的笔记,今天是第二天的,很高兴能给大家提供数据库笔记,这四个 ...
- MySQL约束课堂笔记
今日内容 1. DQL:查询语句1. 排序查询2. 聚合函数3. 分组查询4. 分页查询2. 约束 3. 多表之间的关系 4. 范式 5. 数据库的备份和还原 DQL:查询语句 1. 排序查询* 语法 ...
- MySQL基础课堂笔记
今日内容 数据库的基本概念 MySQL数据库软件 安装 卸载 配置 SQL 数据库的基本概念 1. 数据库的英文单词: DataBase 简称 : DB 2. 什么数据库?* 用于存储和管理数据的仓库 ...
- mysql全部加两岁,mysql数据库课堂笔记2
1.回顾 建库建表应该注意的问题 1)首先建立数据库 2)使用数据库 3)建表 4) 插入数据 2.讲解常用查询语句 1)全字段查询 select * from sanguo; 2)单字段查询 #查询 ...
- MySQL约束- 基础(课堂笔记)
# DQL:查询语句 1.排序查询 * 语法:order by 子句 *order by 排序字段1 排 ...
- (B站动力节点老杜MySQL教程)MySQL课堂笔记-day01.txt
文章目录 文件来源/资料下载: MySQL课堂笔记-day01.txt 1.sql.DB.DBMS分别是什么,他们之间的关系? 2.什么是表? 3.学习MySQL主要还是学习通用的SQL语句,那么SQ ...
- (B站动力节点老杜MySQL教程)MySQL课堂笔记-day03.txt
文章目录 文件来源/资料下载: MySQL课堂笔记-day03.txt 1.约束 1.1.唯一性约束(unique) 1.2.主键约束 1.3.外键约束 2.存储引擎?(整个内容属于了解内容) 2.1 ...
- (B站动力节点老杜MySQL教程)MySQL课堂笔记-day02.txt
文章目录 文件来源/资料下载: MySQL课堂笔记-day02.txt 1.关于查询结果集的去重? 2.连接查询 2.1.什么是连接查询? 2.2.连接查询的分类? 2.3.在表的连接查询方面有一种现 ...
最新文章
- 序列模式挖掘、频繁项集与频繁序列
- demo解析 小程序node.js_小程序-demo:小程序示例
- python教程app下载地址_python教程
- 如何快速将Android库发布到JCenter
- cfF. Boring Queries
- 使用Google Test的一个简单例子
- linux 内核设备管理模型sysfs(入门篇)
- python中提取几列_自己录制的公开课视频中提取字幕(python+opencv+Tesseract-OCR)
- 兰州理工大学linux试题,兰州理工大学学期《电子技术》试题.doc
- pycharm调试debug入门
- 令人激动!谷歌推强化学习新框架「多巴胺」,基于TensorFlow,已开源丨附github...
- 【STM32】使用ST-LINK V2下载程序
- 计算机表格设置宽度,word表格大小调整固定单元格大小设置——想象力电脑应用...
- REUSE_ALV_GRID_DISPLAY_LVC函数输入参数属性的应用
- YoLoV5学习(4)--detect.py程序(预测图片、视频、网络流)逐段讲解~
- C++单例对象是什么?(单例模式)
- 虚拟机配置静态ip地址(VMware,linux系统)
- Linux学习笔记(十一):磁盘配额、磁盘阵列与逻辑卷
- 阿里腾讯“主战场”揭幕:马云33亿入股恒生电子
- private关键字使用实例
热门文章
- 用驴子拖宝马——怎样滥用结构体
- C#中的Socket编程-TCP客户端
- 汇编语言不带冒号标号的用法
- ecc加解密算法 c++_ECC加密算法的基本介绍
- git reset后本地拉取_一份值得收藏的 Git 异常处理清单
- 东南大学4系短学期matlab,东南大学短学期混凝土教学实践
- python中head_python学习笔记[headfirst]
- python编程的常用工具_小白学Python(2)——常用Python编程工具,Python IDE
- 拦截retrofit数据请求返回的信息来判断程序错误点
- java 时间段内月份_java获取某段时间内的月份列表