当前位置: 首页 > news >正文

mysql 动态传入表名 存储过程_MySQL存储过程了解

d6c51b71cde7477a766988db587364d7.png

概述

  • 类似于python中的自定义函数,它的内部包含了一系列可以执行的sql语句,存储过程存放于MySQL服务端中,可以直接通过调用存储过程触发内部sql语句的执行
  • 基本使用
    • create procedure 存储过程的名字(形参1,形参2,....) begin sql代码 end
    • 调用 : call 存储过程的名字();
对于存储过程,可以接收参数,其参数有三类:
#  in          仅用于传入参数用
#  out        仅用于返回值用
#  inout     既可以传入又可以当作返回值

存储过程具体演示 -- MySQL客户端

delimiter $$
create procedure p1(
    in m int,  # 只进不出  m不能返回出去
    in n int,
    out res int  # 该形参可以返回出去,该值只能传变量名
)
begin
    select name from student where id>m and id<n;  -- sql查询语句
    set res=666;  # 将res变量修改 用来标识当前的存储过程代码确实执行了
end $$
delimiter ;

# 针对形参res 不能直接传数据 应该传一个变量名
# 定义变量
set @ret = 10;  -- mysql定义变量的方式
# 查看变量对应的值
select @ret;
mysql> select @ret;
+------+
| @ret |
+------+
|   10 |
+------+
1 row in set (0.00 sec)

mysql> call p1(4,8,@ret);  -- 调用存储过程
+------------+
| name       |
+------------+
| 261工程    |
| T92        |
| Gw E系列   |
+------------+
3 rows in set (0.00 sec)

Query OK, 0 rows affected (0.01 sec)

mysql> select @ret;  -- 查看返回的值,确实被修改了,说明存储过程的sql语句确实执行了
+------+
| @ret |
+------+
|  666 |
+------+
1 row in set (0.00 sec)
    • 创建存储过程

9d3635918202c01d21d758819b35cead.png
    • 调用存储过程

e34445942c7e923e84ca3091f750a38a.png

存储过程具体演示 -- pymysql模块

  • 调用存储过程
    • cursor.callproc('存储过程名字',(参数1,参数2,参数3)) -- 返回的值不需要传变量名了,py模块内部有优化
import pymysql
conn = pymysql.connect(host = '127.0.0.1',port = 3306,user = 'root',password = '123456',db = 'db3',charset = 'utf8mb4')

# cursor = conn.cursor()  # 默认元组返回值的形式
cursor = conn.cursor(cursor = pymysql.cursors.DictCursor)  # 设置返回类型为字典

cursor.callproc('p1',(4,8,10))  -- 使用py传值,返回的值不需要传变量,pymysql模块内部优化

# msg = cursor.fetchone()  # 取出一个
# msg = cursor.fetchmany(2)  # 取出指定个
msg = cursor.fetchall()  # 取出全部
print(msg)  # 这里才是真正查询的数据,需要cursor赋值给变量

# cursor.scroll(6, mode='absolute')  # 相对绝对位置移动游标
# # cursor.scroll(2, mode='relative')  # 相对当前位置移动游标
# print(cursor.fetchone(),'相对当前位置2,再次取值将取出第5个值,因为前面已经取了两次,游标2,下一个值就是5')

conn.commit()  # 不要自己拼接传值,使用自带功能,需要调用commit()
cursor.close()
conn.close()

85d20f1741b2fcca71e97ab40d5d8c0c.png
  • pymysql模块实际传值方式
cursor.callproc('p1',(4,8,10))
'''
@_名_索引=值
@_p1_0=4
@_p1_1=8
@_p1_2=10  -- py模块实际传值
'''

4a6f0f978d31c7a55702a99f7f69a1ee.png

三种开发模式

    • 第一种
      • 应用程序:程序员写代码开发
      • MySQL:提前编写好存储过程,供程序员调用
      • 好处:提升开发效率,执行效率高
      • 缺点:考虑到认为因素,跨部门沟通的问题,后续的存储过程的扩展性差
    • 第二种
      • 应用程序:程序员写代码开发,涉及到数据库操作也自己动手写
      • 优点:扩展性很高
      • 缺点:开发效率慢,编写sql语句太过繁琐,后续还需要考虑sql优化的问题
    • 第三种
      • 应用程序:只写程序代码,不写sql语句,基于别人写好的MySQL的python框架直接调用操作即可 , ORM框架
      • 优点:开发效率很高
      • 缺点:语句的扩展性差,可能会出现效率低下的问题

相关文章:

  • zbbz 坐标标注lisp_CAD中还能这样快速标注尺寸?怪不得同事天天准时下班
  • zoom怎么解除静音_进入Zoom视频会议时为什么没有声音
  • rm删除级联目录的参数是_Linux:绝对路径和相对路径,cd 命令,rm 命令,history 命令详解...
  • 列表输出循环左移_python工厂第20层 多重列表2
  • 清空指令_python应用:linux常用指令
  • animation unity 速度_[Unity+shader]无限循环背景的制作
  • gmt时间转换格式 js_《Vue系列》timeago.js将时间戳转换成“几天前”“几分钟前”等格式...
  • 接收对象数组_分享一些数组对象常用的API
  • 加了版本号会报错_新手常见的python报错及解决方案
  • 飞思卡尔芯片k66单片机溢出_PWM 初试溢出中断
  • 水卡修改金额_【技术分享】关于IC卡,水卡修改控制位教程
  • excel导出多重表头utils_java excel复杂表头和复杂数据导出
  • 程序异常退出的原因_Python异常处理详解(基础篇十一)
  • h5显示今天的时间_试驾红旗H5!红旗品牌卖得最火的车型,开起来究竟咋样?...
  • 雷迪9000使用说明_雷迪司UPS监控软件使用说明
  • “大数据应用场景”之隔壁老王(连载四)
  • 4个实用的微服务测试策略
  • HTTP请求重发
  • HTTP中的ETag在移动客户端的应用
  • IDEA常用插件整理
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • Promise面试题2实现异步串行执行
  • React as a UI Runtime(五、列表)
  • React-Native - 收藏集 - 掘金
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 区块链将重新定义世界
  • 如何实现 font-size 的响应式
  • 十年未变!安全,谁之责?(下)
  • 数据科学 第 3 章 11 字符串处理
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 写给高年级小学生看的《Bash 指南》
  • 用Canvas画一棵二叉树
  • 用jquery写贪吃蛇
  • ​低代码平台的核心价值与优势
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • ( 10 )MySQL中的外键
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (八)Spring源码解析:Spring MVC
  • (搬运以学习)flask 上下文的实现
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (四)图像的%2线性拉伸
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)Linq学习笔记
  • (转)linux下的时间函数使用
  • (转)mysql使用Navicat 导出和导入数据库
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • ./和../以及/和~之间的区别
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .net core 控制台应用程序读取配置文件app.config
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .Net Core与存储过程(一)