1:定义
存储过程(stored procedure)是一组为了完成特定功能的SQL语句集合,经编译后存储在服务器端的数据库中,利用存储过程可以加速SQL语句的执行。
存储过程分为系统存储过程和自定义存储过程。
*系统存储过程在master数据库中,但是在其他的数据库中可以直接调用,并且在调用时不必在存储过程前加上数据库名,因为在创建一个新数据库时,系统存储过程
在新的数据库中会自动创建
*自定义存储过程,由用户创建并能完成某一特定功能的存储过程,存储过程既可以有参数又有返回值,但是它与函数不同,存储过程的返回值只是指明执行是否成功,
并不能像函数那样被直接调用,只能利用execute来执行存储过程。
2:存储过程的优点
*提高应用程序的通用性和可移植性:存储过程创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。并且数据库专业人员可以随时对存储过程进行
修改,且对程序源代码没有影响,这样就极大的提高了程序的可移植性。
*可以更有效的管理用户操作数据库的权限:在Sql Server数据库中,系统管理员可以通过对执行某一存储过程的权限进行限制,从而实现对相应的数据访问进行控制,
避免非授权用户对数据库的访问,保证数据的安全。
*可以提高SQL的速度,存储过程是编译过的,如果某一个操作包含大量的SQL代码或分别被执行多次,那么使用存储过程比直接使用单条SQL语句执行速度快的多。
*减轻服务器的负担:当用户的操作是针对数据库对象的操作时,如果使用单条调用的方式,那么网络上还必须传输大量的SQL语句,如果使用存储过程,
则直接发送过程的调用命令即可,降低了网络的负担。
3.创建存储过程 # 无传参存储过程 delimiter // create procedure p1() BEGIN select * from full_link_automation.licence_use_record; END // delimiter ; # delimiter声明 # P1是存储过程名称
创建好了查看存储过程:
调用:
mysql:
call p1();
python:
#!/usr/bin/env python # -*- coding:utf-8 -*- # @Time:2023/3/5 15:53 # @Author:Lhtester # @Filename:存储过程.py import pymysql # 建立连接 conn = pymysql.connect( host='', port=3306, user='', password='', db='', charset='utf8' ) # 拿游标 cursor = conn.cursor() # 执行存储过程 cursor.callproc("p1")#p1是存储过程名字 print(cursor.fetchall())
有传参存储过程
# 有传参存储过程 delimiter // create procedure p2(in n1 int, in n2 int, out res int) BEGIN select * from full_link_automation.licence_use_record where id >n1 and id < n2; set res = 1; END // delimiter ; n1,n2是入参,res是出参
mysql调用:
set @x=0;
call p2(2,4,@x);
select @x
python调用:
#!/usr/bin/env python # -*- coding:utf-8 -*- # @Time:2023/3/5 15:53 # @Author:Lhtester # @Filename:存储过程.py import pymysql # 建立连接 conn = pymysql.connect( host='', port=3306, user='', password='', db='', charset='utf8' ) # 拿游标 cursor = conn.cursor() # 执行存储过程 # cursor.callproc("p1") # print(cursor.fetchall()) cursor.callproc("p2",(2,4,0))# @_p2_0=2,@_p2_1=4,,@_p2_2=0 cursor.execute('select @_p2_2') print(cursor.fetchone())
执行结果:
标签:p2,存储,再次,数据库,cursor,理解,SQL,过程 From: https://www.cnblogs.com/anhao-world/p/17181100.html