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()
文章来自:博客园/张岩林