mysql 内置存储过程_数据库:mysql内置功能-存储过程
一 存储过程介绍
存储过程包含了一系列可执行的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内置功能-存储过程相关推荐
- mysql权限层级体系_数据库mysql有哪些权限?层级有哪些?
我们想要运行一个文件时,有时候会出现只有管理员才能打开这类软件,这就是权限对于用户的限制.那么在我们最近学习的数据库mysql中,也有这样的权限需要我们去注意吗?小编想说当然有,而且还不少!今天就数据 ...
- mysql 分区指定路径_[数据库]MySQL 指定各分区路径
[数据库]MySQL 指定各分区路径 0 2016-11-08 18:00:44 介绍 可以针对分区表的每个分区指定各自的存储路径,对于innodb存储引擎的表只能指定数据路径,因为数据和索引是存储在 ...
- mysql中自动求和_数据库mysql如何进行字段的自动求和?
数据库MySQL是如何进行字段的自动求和的呢?当我们需要对字段进行求和时,该怎么操作呢?具体的代码编程又是怎样的呢? 数据表qb_shop_content里有N篇文章,fid=1-N;篇里的jinbi ...
- 数据库mysql存储过程_[数据库]mysql存储过程的建立及使用
mysql存储过程的建立及使用 建立存储过程,特别是带有参数的情况反复出错,经常提示"字符串格式不正确",或者是找不到这样,找不到那样,经分细心分析.分步测试,终于上传成功,这里介 ...
- mysql数据去重语句_数据库 mysql 语句
LAMP: Linux系统 A阿帕奇服务器 Mysql数据库 Php语言 mysql:常用代码 create table CeShi1 ( Uid varchar(50) primary key, P ...
- mysql explain详解_数据库mysql(1)——B+TREE索引原理
一.B+Tree索引详解 1.什么是索引? 索引:加速查询的数据结构. 2.索引常见数据结构: #1.顺序查找: 最基本的查询算法-复杂度O(n),大数据量此算法效率糟糕. #2.二叉树查找(bina ...
- mysql 与 xls 连接_数据库MySQL与xls文件的互导
最近的一个项目需要将xls表导入到MySQL数据库中和将MySQL数据表导出到xls表中,在网上搜了很多资料,经过多次尝试终于实现了功能,废话不多说,在这粘贴出代码,希望可以帮到需要的朋友. 一.将. ...
- mysql转储导入错误_数据库MYSQL导入SQL文件时错误的解决方法(2种)
从服务器数据库用navicate导出的.sql文件后再用navicate导入到本地的数据库中会出现若干条记录的错误: [Err] 1064 – You have an error in your SQ ...
- mysql语句成绩等级_数据库mysql中case如何给成绩划分等级?
在表格中如果我们要给不同分段的成绩评选等级,只需要使用筛选功能输入评定的条件即可.那么在mysql中我们该如何输出跟表格一样结果呢?这里有的小伙伴说可以用我们刚学习的case函数来尝试.但是作为最基础 ...
- mysql清空数据库所有表的命令_mysql清空表数据命令是什么?_数据库,mysql,清空表数据...
mysql服务无法启动怎么解决_数据库 mysql服务无法启动的解决方法是:1.配置环境变量:2.在mysql安装目录下,新建my.ini文件,设置默认字符集.端口.存储引擎等:3.执行[mysqld ...
最新文章
- 从源码角度看Android系统Zygote进程启动过程
- python动态规划图解_动态规划案例之python实现(一)
- 定义const变量是不可以赋值_JavaScript的声明方法和作用范围,常见的结构赋值类型和使用场景...
- 移动端 IP 优选方案
- C#LeetCode刷题之#344-反转字符串​​​​​​​(Reverse String)
- 联系服务器安装系统教程,服务器安装系统教程
- (30)Gulp 文件操作
- CukeTest新版本公测邀请-Windows应用自动化
- 实现会员到期_微信电子会员卡管理系统
- 求解哈夫曼编码Java实现,哈夫曼编码(Java)
- java pdf 加水印
- Cannot run program “D:\jdk8\bin\java.exe“ (in directory “C:\Users\Administrator\AppData\Local\JetBra
- Elsevier LaTeX 模板中参考文献没有序号,且文章引用不是序号引用
- 能量时域空间物理_能量态空间
- IO中write函数
- 美团圈圈是什么?美团圈圈介绍,美团圈圈是什么平台?
- USB fastboot
- 刹那芳华,犹如指尖流砂
- jkd8 Stream的使用
- AI人工智能识别技术如何助力构建风险监测预警系统?
热门文章
- 4. ex 命令(1)
- 32. Magento log()方法
- 5. php 基本数据类型
- 3.安装Discuz
- 第010讲 通配符选择器 父子选择器
- css中的clip属性rect(top,right,bottom,left);
- SpringMVC详解(四)------SSM三大框架整合之登录功能实现
- 5款好用的开源JS图片裁剪插件(3个jQuery插件,2个AngularJS插件)
- CentOS7安装Jenkins Master
- Java 系列之spring学习--springmvc注解参数传递(六)