mysql存储过程是怎样的

Mysql存储过程是我们学习Mysql的重要知识点,这篇文章主要给大家讲解一下创建存储的过程是怎样的。

 

1、我们为什么要用存储过程呢 ?

我们都知道应用程序分为两种,一种是基于web,一种是基于桌面,他们都和数据库进行交互来完成数据的存取工作。假设现在有一种应用程序包含了这两 种,现在要修改其中的一个查询sql语句,那么我们可能要同时修改他们中对应的查询sql语句,当我们的应用程序很庞大很复杂的时候问题就出现这,不易维 护!另外把sql查询语句放在我们的web程序或桌面中很容易遭到sql注入的破坏。而存储例程正好可以帮我们解决这些问题。

 

2、创建存储过程

创建存储过程这块主要有两种,一种是带参数的,一种是不带参数的,先讲不带参数的再说不带参数的

不带参数案例:

-- 创建存储过程

delimiter //        --自定义语句结尾符号,因为这里要执行好多句sql语句,所以就得自定义,以防止出错

create procedure p1()

BEGIN

    select * from tab1;

END//

delimiter ;         --自定义局域结尾符号结束

 

-- 执行存储过程

call p1()

带参数案例这块主要有三个类

in          仅用于传入参数用

out        仅用于返回值用

inout     既可以传入又可以当作返回值

-- 创建存储过程

delimiter \\

create procedure p1(

    in i1 int,                        -- 传入参数i1

    in i2 int,                        -- 传入参数i2

    inout i3 int,                     -- 即传入又能得到返回值

    out r1 int                        -- 得到返回值

)

BEGIN

    DECLARE temp1 int;

    DECLARE temp2 int default 0;  

    set temp1 = 1;

    set r1 = i1 + i2 + temp1 + temp2;

    set i3 = i3 + 100;

end\\

delimiter ;

 

-- 执行存储过程

DECLARE @t1 INT default 3;           --  设置变量默认值为3

DECLARE @t2 INT;                     --  设置变量

CALL p1 (1, 2 ,@t1, @t2);            --  执行存储过程,并传入参数,t2自动取消

SELECT @t1,@t2;                      --  查看存储过程输出结果

2、删除存储过程

drop procedure p1;

3、python用pymysql模块调用存储过程,因为我们学习这些就是为了语言调用

#!/usr/bin/env python

# -*- coding:utf-8 -*-

import pymysql

 

conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='', db='day39b_')

cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 执行存储过程

row = cursor.callproc('p1',(1,2,3))

# 存储过程的查询结果

selc = cursor.fetchall()

print(selc)

# 获取存储过程返回

effect_row = cursor.execute('select @_p1_0,@_p1_1,@_p1_2')

# 曲存储过程的返回值

ret = cursor.fetchone()

print(ret)

# 提交,不然无法保存新建或者修改的数据

conn.commit()

# 关闭游标

cursor.close()

# 关闭连接

conn.close()

 

 

 

文章来自:博客园/张岩林

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值