再次理解存储过程

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())

执行结果:

 

 

 

 

posted @ 2023-03-05 17:48  安好_世界  阅读(27)  评论(0编辑  收藏  举报