一 存储过程介绍

存储过程包含了一系列可执行的sql语句,存储过程存放于MySQL中,通过调用它的名字可以执行其内部的一堆sql

使用存储过程的优点:

#1. 用于替代程序写的SQL语句,实现程序与sql解耦

#2. 基于网络传输,传别名的数据量小,而直接传sql数据量大

使用存储过程的缺点:

#1. 程序员扩展功能不方便

补充:程序与数据库结合使用的三种方式

#方式一:

MySQL:存储过程

程序:调用存储过程

#方式二:

MySQL:

程序:纯SQL语句

#方式三:

MySQL:

程序:类和对象,即ORM(本质还是纯SQL语句)

二 创建简单存储过程(无参)

先创建表:

mysql> create table blog( id int primary key auto_increment,

-> name varchar(20),

-> sub_time date);

创建存储过程

delimiter //

create procedure p1()

BEGIN

select * from blog;

INSERT INTO blog(name,sub_time) VALUES ("测试", NOW());

END //

delimiter;

#在mysql中调用

call p1()

#在python中基于pymysql调用

cursor.callproc('p1')

print(cursor.fetchall())

三 创建存储过程(有参)

对于存储过程,可以接收参数,其参数有三类

# in 仅用于传入参数用

# out 仅用于返回参数用

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

delimiter //

create procedure p2(

in n1 int,

in n2 int

)

BEGIN

select * from blog where id > n1;

END //

delimiter ;

#在mysql中调用

call p2(3,2)

#在python中基于pymysql调用

cursor.callproc('p2',(3,2))

print(cursor.fetchall())

delimiter //

create procedure p3(

in n1 int,

out res int

)

BEGIN

select * from blog where id > n1;

set res = 1;

END //

delimiter ;

#在mysql中调用

set @res=0; #0代表假(执行失败),1代表真(执行成功)

call p3(3,@res);

select @res;

#在python中基于pymysql调用

cursor.callproc('p3',(3,0)) #0相当于set @res=0

print(cursor.fetchall()) #查询select的查询结果

cursor.execute('select @_p3_0,@_p3_1;') #@p3_0代表第一个参数,@p3_1代表第二个参数,即返回值

print(cursor.fetchall())

delimiter //

create procedure p4(

inout n1 int

)

BEGIN

select * from blog where id > n1;

set n1 = 1;

END //

delimiter ;

#在mysql中调用

set @x=3;

call p4(@x);

select @x;

#在python中基于pymysql调用

cursor.callproc('p4',(3,))

print(cursor.fetchall()) #查询select的查询结果

cursor.execute('select @_p4_0;')

print(cursor.fetchall())

四 执行存储过程

-- 无参数

call proc_name()

-- 有参数,全in

call proc_name(1,2)

-- 有参数,有in,out,inout

set @t1=0;

set @t2=3;

call proc_name(1,2,@t1,@t2)

执行存储过程

在MySQL中执行存储过程-- 无参数

call proc_name()

-- 有参数,全in

call proc_name(1,2)

-- 有参数,有in,out,inout

set @t1=0;

set @t2=3;

call proc_name(1,2,@t1,@t2)

import pymysql

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

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

# 执行存储过程

cursor.callproc('p1', args=(1, 22, 3, 4))

# 获取执行完存储的参数

cursor.execute("select @_p1_0,@_p1_1,@_p1_2,@_p1_3")

result = cursor.fetchall()

conn.commit()

cursor.close()

conn.close()

print(result)

五 删除存储过程

drop procedure proc_name

mysql 内置存储过程_数据库:mysql内置功能-存储过程相关推荐

  1. mysql权限层级体系_数据库mysql有哪些权限?层级有哪些?

    我们想要运行一个文件时,有时候会出现只有管理员才能打开这类软件,这就是权限对于用户的限制.那么在我们最近学习的数据库mysql中,也有这样的权限需要我们去注意吗?小编想说当然有,而且还不少!今天就数据 ...

  2. mysql 分区指定路径_[数据库]MySQL 指定各分区路径

    [数据库]MySQL 指定各分区路径 0 2016-11-08 18:00:44 介绍 可以针对分区表的每个分区指定各自的存储路径,对于innodb存储引擎的表只能指定数据路径,因为数据和索引是存储在 ...

  3. mysql中自动求和_数据库mysql如何进行字段的自动求和?

    数据库MySQL是如何进行字段的自动求和的呢?当我们需要对字段进行求和时,该怎么操作呢?具体的代码编程又是怎样的呢? 数据表qb_shop_content里有N篇文章,fid=1-N;篇里的jinbi ...

  4. 数据库mysql存储过程_[数据库]mysql存储过程的建立及使用

    mysql存储过程的建立及使用 建立存储过程,特别是带有参数的情况反复出错,经常提示"字符串格式不正确",或者是找不到这样,找不到那样,经分细心分析.分步测试,终于上传成功,这里介 ...

  5. mysql数据去重语句_数据库 mysql 语句

    LAMP: Linux系统 A阿帕奇服务器 Mysql数据库 Php语言 mysql:常用代码 create table CeShi1 ( Uid varchar(50) primary key, P ...

  6. mysql explain详解_数据库mysql(1)——B+TREE索引原理

    一.B+Tree索引详解 1.什么是索引? 索引:加速查询的数据结构. 2.索引常见数据结构: #1.顺序查找: 最基本的查询算法-复杂度O(n),大数据量此算法效率糟糕. #2.二叉树查找(bina ...

  7. mysql 与 xls 连接_数据库MySQL与xls文件的互导

    最近的一个项目需要将xls表导入到MySQL数据库中和将MySQL数据表导出到xls表中,在网上搜了很多资料,经过多次尝试终于实现了功能,废话不多说,在这粘贴出代码,希望可以帮到需要的朋友. 一.将. ...

  8. mysql转储导入错误_数据库MYSQL导入SQL文件时错误的解决方法(2种)

    从服务器数据库用navicate导出的.sql文件后再用navicate导入到本地的数据库中会出现若干条记录的错误: [Err] 1064 – You have an error in your SQ ...

  9. mysql语句成绩等级_数据库mysql中case如何给成绩划分等级?

    在表格中如果我们要给不同分段的成绩评选等级,只需要使用筛选功能输入评定的条件即可.那么在mysql中我们该如何输出跟表格一样结果呢?这里有的小伙伴说可以用我们刚学习的case函数来尝试.但是作为最基础 ...

  10. mysql清空数据库所有表的命令_mysql清空表数据命令是什么?_数据库,mysql,清空表数据...

    mysql服务无法启动怎么解决_数据库 mysql服务无法启动的解决方法是:1.配置环境变量:2.在mysql安装目录下,新建my.ini文件,设置默认字符集.端口.存储引擎等:3.执行[mysqld ...

最新文章

  1. 从源码角度看Android系统Zygote进程启动过程
  2. python动态规划图解_动态规划案例之python实现(一)
  3. 定义const变量是不可以赋值_JavaScript的声明方法和作用范围,常见的结构赋值类型和使用场景...
  4. 移动端 IP 优选方案
  5. C#LeetCode刷题之#344-反转字符串​​​​​​​(Reverse String)
  6. 联系服务器安装系统教程,服务器安装系统教程
  7. (30)Gulp 文件操作
  8. CukeTest新版本公测邀请-Windows应用自动化
  9. 实现会员到期_微信电子会员卡管理系统
  10. 求解哈夫曼编码Java实现,哈夫曼编码(Java)
  11. java pdf 加水印
  12. Cannot run program “D:\jdk8\bin\java.exe“ (in directory “C:\Users\Administrator\AppData\Local\JetBra
  13. Elsevier LaTeX 模板中参考文献没有序号,且文章引用不是序号引用
  14. 能量时域空间物理_能量态空间
  15. IO中write函数
  16. 美团圈圈是什么?美团圈圈介绍,美团圈圈是什么平台?
  17. USB fastboot
  18. 刹那芳华,犹如指尖流砂
  19. jkd8 Stream的使用
  20. AI人工智能识别技术如何助力构建风险监测预警系统?

热门文章

  1. 4. ex 命令(1)
  2. 32. Magento log()方法
  3. 5. php 基本数据类型
  4. 3.安装Discuz
  5. 第010讲 通配符选择器 父子选择器
  6. css中的clip属性rect(top,right,bottom,left);
  7. SpringMVC详解(四)------SSM三大框架整合之登录功能实现
  8. 5款好用的开源JS图片裁剪插件(3个jQuery插件,2个AngularJS插件)
  9. CentOS7安装Jenkins Master
  10. Java 系列之spring学习--springmvc注解参数传递(六)