欢迎加入QQ讨论群258996829
麦子学院 头像
苹果6袋
6
麦子学院

mysql存储过程学习教程

发布时间:2016-08-27 23:23  回复:0  查看:2408   最后回复:2016-08-27 23:23  

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;

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

#!/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()

 

 

 

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

您还未登录,请先登录

热门帖子

最新帖子