【MySQL】函数及存储过程

MySQL函数和存储过程

函数

数据库中的函数是一种可重复使用的命名代码块,用于在数据库中执行特定的操作或计算。
在MySQL中提供了很多函数,为我们的SQL提供了便利

  • 内置函数
mysql> select count(r_id),max(r_id),min(r_id),avg(r_id) from resume_library;
+-------------+-----------+-----------+------------+
| count(r_id) | max(r_id) | min(r_id) | avg(r_id)  |
+-------------+-----------+-----------+------------+
|       26764 |     27195 |         1 | 13491.3612 |
+-------------+-----------+-----------+------------+
1 row in set (0.03 sec)mysql> select r_id,reverse(姓名) from resume_library where 姓名 like '于金_';
+-------+---------------+
| r_id  | reverse(姓名) |
+-------+---------------+
|   285 | 曼金于        |
| 20499 | 淼金于        |
|   286 | 龙金于        |
+-------+---------------+
3 rows in set (0.00 sec)mysql> select r_id,concat('阿龙','真帅'),now(),date_format(now(),'%Y-%m-%d %H:%i:%s') from resume_library where r_id=1;+------+-----------------------+---------------------+----------------------------------------+
| r_id | concat('阿龙','真帅') | now()               | date_format(now(),'%Y-%m-%d %H:%i:%s') |
+------+-----------------------+---------------------+----------------------------------------+
|    1 | 阿龙真帅              | 2024-09-22 17:30:22 | 2024-09-22 17:30:22                    |
+------+-----------------------+---------------------+----------------------------------------+
1 row in set (0.00 sec)-- 字符拼接
mysql> select concat('阿龙','真帅');
+-----------------------+
| concat('阿龙','真帅') |
+-----------------------+
| 阿龙真帅              |
+-----------------------+
1 row in set (0.00 sec)-- 睡眠5秒
mysql> select sleep(5);
+----------+
| sleep(5) |
+----------+
|        0 |
+----------+
1 row in set (5.00 sec)
  • 创建函数
-- 更改结束标志符号,方便创建函数
mysql> delimiter $$
mysql> create function f1()->     returns int-> begin->     declare num int;->     declare minid int;->     declare maxid int;->     select max(r_id) from resume.resume_library into maxid;->     select min(r_id) from resume.resume_library into minid;->     set num = maxid + minid;->     return (num);-> end $$
Query OK, 0 rows affected (0.00 sec)
-- 更改结束标志符号
mysql> delimiter ;
  • 执行函数
select f1() from resume.resume_library;
  • 删除函数
mysql> drop function f1;
Query OK, 0 rows affected (0.00 sec)

存储过程

存储过程,是一个存储MySQL中上sql语句的集合,当主动去调用存储过程时,其中内部的sql语句按照逻辑执行。

  • 创建存储过程
mysql> create procedure p1()-> begin-> select * from t3;-> end $$
Query OK, 0 rows affected (0.00 sec)
  • 执行存储过程
call p1();
  • Python程序执行存储过程
# -*- coding: UTF-8 -*-
"""
@Project :lufei-learning-city 
@File    :存储过程.py
@IDE     :PyCharm 
@Author  :于金龙@阿龙的代码在报错
@Date    :2024/9/22 下午6:29 
"""
import pymysqlconn = pymysql.connect(host='localhost',port=3306,user='root',password='20020115',db='resume',charset='utf8'
)
cursor = conn.cursor()cursor.callproc('p1')
result = cursor.fetchall()
cursor.close()
conn.close()
print(result)
  • 删除存储过程
mysql> drop procedure p1;
Query OK, 0 rows affected (0.00 sec)

参数类型

存储过程的参数可以分为三种类型:

  • in,仅用于传入参数
  • out,仅用于返回参数
  • inout,既可以传入又可以当做返回值
use user;
-- 更改结束标识符
delimiter $$
create procedure p2(in i1 int,in i2 int,inout i3 int,out r1 int
)
begindeclare temp1 int;declare temp2 int default 0;set temp1 = 1;set r1 = i1 + i2 + temp1 + temp2;set i3 = i3 + 100;
end $$-- 更改结束标识符
delimiter ;

调用存储过程

set @t1=4;
set @t2=0;
call p2(1,2,@t1,@t2)
select @t1,@t2

python进行执行

# -*- coding: UTF-8 -*-
"""
@Project :lufei-learning-city 
@File    :存储过程.py
@IDE     :PyCharm 
@Author  :于金龙@阿龙的代码在报错
@Date    :2024/9/22 下午6:29 
"""
import pymysqlconn = pymysql.connect(host='localhost',port=3306,user='root',password='20020115',db='user',charset='utf8'
)
cursor = conn.cursor()# cursor.callproc('p1')
# result = cursor.fetchall()cursor.callproc('p2', args=(1, 22, 3, 4))
table = cursor.fetchall()cursor.execute('select @_p2_0,@_p2_1,@_p2_2,@_p2_3')
result = cursor.fetchall()cursor.close()
conn.close()
print(result)

返回值和返回集

  • 创建存储过程
delimiter $$create procedure p3(in n1 int,inout n2 int,out n3 int
)
beginset n2 = n1 + 100;set n3 = n2 + n1 + 100;select * from girl;
end $$
delimiter ;
set @t1 = 4;
set @t2 = 0;
call p3(1, @t1, @t2);
select @t1, @t2;
# -*- coding: UTF-8 -*-
"""
@Project :lufei-learning-city 
@File    :存储过程.py
@IDE     :PyCharm 
@Author  :于金龙@阿龙的代码在报错
@Date    :2024/9/22 下午6:29 
"""
import pymysqlconn = pymysql.connect(host='localhost',port=3306,user='root',password='20020115',db='user',charset='utf8'
)cursor = conn.cursor()
cursor.callproc('p3', args=(22, 3, 4))
table = cursor.fetchall()  # 执行过程中的结果集
# 获取执行完存储参数
cursor.execute('select @_p3_0,@_p3_1,@_p3_2')
result = cursor.fetchall()cursor.close()
conn.close()
print(result)
print(table)
  • 事务和异常

事务,成功都成功,失败都失败

delimiter $$
create procedure p4(out p_return_code tinyint
)
begindeclare exit handler for sqlexceptionbegin-- errorset p_return_code = 1;rollback;end;declare exit handler for sqlwarningbegin-- waringset p_return_code = 2;rollback;end;start transaction ; -- 开启事务delete from girl;insert into girl(name) values ('1');commit; -- 提交事务set p_return_code = 0;
end $$
delimiter ;

python进行执行

# -*- coding: UTF-8 -*-
"""
@Project :lufei-learning-city 
@File    :存储过程.py
@IDE     :PyCharm 
@Author  :于金龙@阿龙的代码在报错
@Date    :2024/9/22 下午6:29 
"""
import pymysqlconn = pymysql.connect(host='localhost',port=3306,user='root',password='20020115',db='user',charset='utf8'
)
cursor = conn.cursor()cursor.callproc('p4', args=(100,))
cursor.execute("select @_p4_0")
result = cursor.fetchall()
cursor.close()
conn.close()
print(result)

油标和存储过程

delimiter $$create procedure p5()
begindeclare sid int;declare sname varchar(50);declare done int default false;-- 声明油标declare my_cursor cursor for select id, namefrom girl;declare continue handler for NOT FOUND set done = TRUE;OPEN my_cursor;xxoo:loopfetch my_cursor into sid,sname;if done thenleave xxoo;end if;insert into t1(name) values (sname);end loop xxoo;close my_cursor;
end $$
delimiter ;call p5();

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

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

相关文章

docker build 有时候不展示命令的输出情况,怎么办?

来源:https://stackoverflow.com/questions/64804749/why-is-docker-build-not-showing-any-output-from-commands docker build 有时候不展示命令的输出情况,不方便我们 debug,怎么办? 可以加上 docker build --progressplain …

C++和OpenGL实现3D游戏编程【连载10】——纹理的半透明显示

1、本节实现的内容 上一节课我们讲到了图片的镂空显示,它能在显示图片时去除指定颜色的背景,那么这节课我们来说一下图片的半透明显示效果,半透明效果能给画面带来更高质量的提升,使图片显示的更自然,产生更真实的效果。下面是一个气泡向上漂浮的效果。 气泡效果 2、非纹…

2024华为OD机试E卷-判断一组不等式是否满足约束并输出最大差-(C++/Java/Python)

2024华为OD机试最新E卷题库-(C卷+D卷+E卷)-(JAVA、Python、C++) 目录 题目描述 输入描述 输出描述 用例1 用例2 考点分析 题目解析 代码 c++ python java 题目描述 给定一组不等式,判断是否成立并输出不等式的最大差(输出浮点数的整数部分) 要求: 不等式系数为…

搜索引擎简介

搜索引擎架构 整个搜索引擎分为三个系统 爬虫系统 索引系统 线上搜素服务 爬虫系统 爬虫分为两个阶段: 第一阶段:根据目标网站的列表页,爬对应的文档 URL 第二阶段:根据文档 URL,下载文档内容 触发器&#xff1…

【行业报告】AI大模型对我国劳动力市场潜在影响研究报告(2024),附PDF下载!!

前言 9月13日,北京大学国家发展研究院联合智联招聘在中国国际服务贸易交易会上发布的《AI大模型对我国劳动力市场潜在影响研究:2024》(以下简称“报告”)显示,2024年上半年,招聘职位数同比增速前五的人工智…

数据结构——二叉树的性质和存储结构

二叉树的抽象类型定义 基本操作: CreateBiTree(&T,definition) 初始条件:definition给出二叉树T的定义。 操作结果:按definition构造二叉树T。 PreOrderTraverse(T) 初始条件:二叉树T存在。 操作结果:先序遍历T,对每个结…

基于Hive和Hadoop的白酒分析系统

本项目是一个基于大数据技术的白酒分析系统,旨在为用户提供全面的白酒市场信息和深入的价格分析。系统采用 Hadoop 平台进行大规模数据存储和处理,利用 MapReduce 进行数据分析和处理,通过 Sqoop 实现数据的导入导出,以 Spark 为核…

LLM | Ollama WebUI 安装使用(pip 版)

Open WebUI (Formerly Ollama WebUI) 也可以通过 docker 来安装使用 1. 详细步骤 1.1 安装 Open WebUI # 官方建议使用 python3.11(2024.09.27),conda 的使用参考其他文章 conda create -n open-webui python3.11 conda activate open-web…

Java五子棋

目录 一:案例要求: 二:代码: 三:结果: 一:案例要求: 实现一个控制台下五子棋的程序。用一个二维数组模拟一个15*15路的五子棋棋盘,把每个元素赋值位“┼”可以画出棋…

不夸张、我就是这样考过PMP~

🌵方法虽然有点笨,但是按照这个方法认真学,60天过PMP真的来得及!PMP是通过性考试,只要拿下及格分就行,选对学习方法两个月3A上岸稳稳的!🔺24年11月PMP考试时间:11月30日&…

通过OpenScada在ARMxy边缘计算网关上实现数字化转型

随着工业4.0概念的普及,数字化转型已成为制造业升级的关键路径之一。在此背景下,边缘计算技术因其能够有效处理大量数据、减少延迟并提高系统响应速度而受到广泛关注。ARMxy边缘计算网关,特别是BL340系列,凭借其强大的性能和灵活的…

SQL高可用优化-优化SQL中distinct和Where条件对索引字段进行非空检查语句

最近做一个需求,关于SQL高可用优化,需要优化项目中的SQL,提升查询效率。 SQL高可用优化 一、优化SQL包含distinct场景二、优化SQL中Where条件中索引字段是否为NULL三、代码验证1. NodeMapper2. NodeService3. NodeController4.数据库数据5.项…

SPI总结

1.前言 1.1 SPI简介 SPI全称Serial Peripheral Interface,串行外设接口,是一种用于连接外设的全双工通信总线。主机和从机支持一对一或一对多通讯连接。 图1 SPI物理层通讯连接 表1 Signal description 1.2 SPI特征 串行,每个时钟周期只传…

RM服务器研究(一)

客户端默认端口是10100: MultiPort.dll BOOL sub_10001070() { UINT v0; // esi BOOL result; // eax CHAR KeyName; // [espCh] [ebp-10Ch] DWORD flOldProtect; // [esp10h] [ebp-108h] CHAR Buffer; // [esp14h] [ebp-104h] char v5; // [esp15h] [e…

每日论文6—16ISCAS一种新型低电流失配和变化电流转向电荷泵

《A Novel Current Steering Charge Pump with Low Current Mismatch and Variation》16ISCAS 本文首先介绍了传统的current steering charge pump,如下图: 比起最简单的电荷泵,主要好处是UP和DN开关离输出节点较远,因此一定程度…

linux中怎么一次提交多条命令

在Linux上,如果你想要多条命令一起运行,有几种方式可以实现,但具体使用哪种方式取决于你希望这两条命令如何并行或顺序执行。 1、顺序执行:如果你希望第一条命令执行完毕后,再执行第二条命令,你可以简单地…

echarts 导出pdf空白原因

问题阐述 页面样式: 导出pdf: 导出pdf,统计图部分为空白。 问题原因 由于代码中进行了dom字符串的复制,而echarts用canvas绘制,canvas内部内容不会进行复制,只会复制canvas节点,因此导出pdf空白。 解决…

C语言VS实用调试技巧

文章目录 一、什么是bug?二、什么是调试?三、Debug和Release四、VS调试快捷键4.1环境准备4.2调试快捷键 五、监视和内存观察5.1监视5.2内存 六、调试举例七、编程常见错误归类7.1编译型错误7.2链接型错误7.3运行时错误 一、什么是bug? 🍎bug本意是 “…

【珠海一号卫星】

珠海一号卫星 珠海一号卫星星座是由珠海欧比特宇航科技股份有限公司发射并运营的商业遥感微纳卫星星座,是中国首家由民营上市公司建设并运营的卫星星座。以下是对珠海一号卫星的详细介绍: 一、基本概况 组成:整个星座由34颗卫星组成&…

centos安装nginx指定pcre位置

载PCRE源码。您可以从PCRE的官方网站(https://www.pcre.org/)获取最新版本的源码。例如,如果您要安装PCRE 8.44,可以使用以下命令下载并解压 wget https://ftp.pcre.org/pub/pcre/pcre-8.44.tar.gz tar -zxvf pcre-8.44.tar.gz编…