0、创建表:

(1)建表:

CREATE TABLE blog (

id INT PRIMARY KEY auto_increment,

name CHAR(64),

sub_time datetime

);

(2)查看数据(为空):

1、什么是存储过程:

(1)存储过程包含了一系列可执行的sql语句,存储过程存放于MySQL中,通过调用它的名字

可以执行其内部的一堆sql。

(2)使用存储过程的优点:

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

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

(3)使用存储过程的缺点:

1)程序员扩展功能不方便。

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

1)方式一:

MySQL:存储过程

程序:调用存储过程

2)方式二:

MySQL:

程序:纯SQL语句

3)方式三:

MySQL:

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

2、创建简单存储过程(无参):

(1)代码:

delimiter //

create procedure p1()

BEGIN

select * from blog;

INSERT into blog(name,sub_time) values("xxx",now());

END //

delimiter ;

(2)在mysql中调用:

1)调用存储过程:

call p1();

2)查看数据(数据已经被插入):

(3)在python中基于pymysql调用:

cursor.callproc('p1')

print(cursor.fetchall())

3、创建存储过程(有参):

(1)参数说明:

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

1)in #仅用于传入参数用

2)out #仅用于返回值用

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

(2)in:传入参数:

1)代码:

delimiter //

create procedure p2(

in n1 int,

in n2 int

/*定义输入值的类型*/

)

BEGIN

select * from blog where id > n1;

END //

delimiter ;

2)在mysql中调用存储过程:

call p2(0,2);

3)在python中基于pymysql调用:

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

print(cursor.fetchall())

(3)out:返回值:

1)代码:

delimiter //

create procedure p3(

in n1 int,

out res int

)

BEGIN

select * from blog where id > n1;

set res = 1;

END //

delimiter ;

2)在mysql中调用存储过程:

--设置会话级变量:

set @res=0;

#0代表假(执行失败),1代表真(执行成功)

--查询:

--调用存储过程:

call p3(0,@res);

--查询:

--说明:需要设置会话级变量,out返回的结果再赋给会话级变量。

3)在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())

(4)inout:既可以传入值又可以返回值:

1)代码:

delimiter //

create procedure p4(

inout n1 int

)

BEGIN

select * from blog where id > n1;

set n1 = 1;

END //

delimiter ;

2)在mysql中调用存储过程:

--设置会话级变量:

set @x=0;

--查询:

--调用存储过程:

call p4(@x);

--查询:

select @x;

--说明:需要设置会话级变量,inout返回的结果再赋给会话级变量。

3)在python中基于pymysql调用:

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

print(cursor.fetchall())

#查询select的查询结果

cursor.execute('select @_p4_0;')

print(cursor.fetchall())

4、执行存储过程:

(1)无参数:

call proc_name()

(2)有参数,全in:

call proc_name(1,2)

(3) 有参数,有in,out,inout:

set @t1=0;

set @t2=3;

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

--说明:需要设置会话级变量,inout或out返回的结果再赋给会话级变量。

5、删除存储过程:

(1)语法:

drop procedure 存储过程名称

(2)示例:

drop procedure p1;

drop procedure p2;

drop procedure p3;

drop procedure p4;

6、存储过程之流程控制:

(1)if条件语句:

1)代码:

delimiter //

CREATE PROCEDURE proc_if (

in i int

/*定义输入值的类型*/

)

BEGIN

/*declare i int default 0;*/

/*在存储过程主体中定义变量类型及默认值*/

if i = 1 THEN

SELECT 1;

/*输出结果*/

ELSEIF i = 2 THEN

SELECT 2;

ELSE

SELECT 7;

END IF;

END //

delimiter ;

2)示例:

call proc_if(9);

call proc_if(2);

(2)while循环语句:

1)代码:

delimiter //

CREATE PROCEDURE proc_while ()

BEGIN

DECLARE num INT;

SET num = 0;

WHILE num < 3 DO

SELECT num;

SET num = num + 1;

END WHILE;

END //

delimiter ;

2)示例:

call proc_while();

(3)repeat循环语句:

1)代码:

delimiter //

CREATE PROCEDURE proc_repeat()

BEGIN

DECLARE i INT;

SET i = 0;

repeat

select i;

set i = i + 1;

until i >= 3

end repeat;

END //

delimiter ;

2)示例:

41、mysql数据库(存储过程)的更多相关文章

  1. JDBC对MySQL数据库存储过程的调用

    一.MySQL数据库存储过程: 1.什么是存储过程 存储过程(英文:Stored Procedure)是在大型数据库系统中,为了完成特定功能而编写的一组的SQL语句集.存储过程经编译存储在数据库中,用 ...

  2. MySQL数据库----存储过程

    存储过程 存储过程包含了一系列可执行的sql语句,存储过程存放于MySQL中,通过调用它的名字可以执行其内部的一堆sql -- 存储过程的优点: -- 1.程序与数据实现解耦 -- 2.减少网络传输的 ...

  3. 关于MySQL数据库存储过程的感想

    以下只是学习路上的浅薄感想,如理解有所偏差,还请有识之士指正! 一.存储过程意义理解 关于存储过程,我的理解是对数据库语言进行编程调用,就像Java代码类编程写一个具有某种特定功能的方法去进行调用一样 ...

  4. mysql数据库存储过程异常处理

    14.1.4  定义条件和处理程序 定义条件和处理程序是事先定义程序执行过程中可能遇到的问题.并且可以在处理程序中定义解决这些问题的办法.这种方式可以提前预测可能出现的问题, 并提出解决办法.这样可以 ...

  5. MySQL数据库存储过程动态表建立(PREPARE)

    PREPARE statement_name FROM sql_text /*定义*/ EXECUTE statement_name [USING variable [,variable...]] / ...

  6. MySQL数据库中delimiter的作用概述

    以下的文章主要是向大家描述的是MySQL数据库中delimiter的作用是什么?我们一般都认为这个命令和存储过程关系不大,到底是不是这样的呢?以下的文章将会给你相关的知识,望你会有所收获. 其实就是告 ...

  7. mysql之——存储过程 + 游标 + 事务

    下面是自己曾经编写过的mysql数据库存储过程,留作存档,以后用到的时候拿来参考. 其中,涉及到了存储过程.游标(双层循环).事务. [说明]:代码中的注释只针对当时业务而言,无须理会. 代码如下: ...

  8. ava基础MySQL存储过程 Java基础 JDBC连接MySQL数据库

    1.MySQL存储过程   1.1.什么是存储过程 带有逻辑的sql语句:带有流程控制语句(if  while)等等 的sql语句   1.2.存储过程的特点 1)执行效率非常快,存储过程是数据库的服 ...

  9. Mysql 数据库无法删除 41 错误

    今天删除Mysql 数据库时候,没法删除,直接报错 41: 方法,进入 mysql的安装目录 我的是:D:\tools\Mysql\V76384-01\mysql-advanced-5.6.25-wi ...

随机推荐

  1. [刷题] 416 Partition Equal Subset Sum

    要求 非空数组的所有数字都是正整数,是否可以将这个数组的元素分成两部分,使得每部分的数字和相等 最多200个数字,每个数字最大为100 示例 [1,5,11,5],返回 true [1,2,3,5], ...

  2. 3.1.5 LTP(Linux Test Project)学习(五)-LTP代码学习

    3.1.5 LTP(Linux Test Project)学习(五)-LTP代码学习 Hello小崔 ​ 华为技术有限公司 Linux内核开发 2 人赞同了该文章 LTP代码学习方法主要介绍两个步骤, ...

  3. Linux基本原则

    Bash特性 Shell shell(外壳),广义的shell可以理解为是用户的工作环境,在windows看来桌面就是一个shell,在linux看来终端就是shell 常见的shell有两种,一种是 ...

  4. C++课程设计 通讯录管理系统 原码及解析

    设计题目:通信录管理系统 用C++设计出模拟手机通信录管理系统,实现对手机中的通信录进行管理. (一)功能要求 查看功能:选择此功能时,列出下列三类选择. A 办公类B 个人类C 商务类,当选中某类时 ...

  5. shell基础之综合练习

    0.脚本一键完成下面所有操作1.准备2台centos7系统的服务器,远程互相免密登录,以下所有题目过程中开启防火墙2.给1号机和2号机使用光盘搭建本地yum源(永久生效)3.给服务器1添加2块硬盘,1 ...

  6. 『动善时』JMeter基础 — 24、JMeter中使用“用户参数”实现参数化

    目录 1.用户参数组件介绍 2.用户参数界面介绍 3.使用"用户参数"组件实现参数化 (1)测试计划内包含的元件 (2)线程组元件内容 (3)HTTP请求组件内容 (4)用户参数组 ...

  7. Redis学习笔记七:主从集群

    单机,单节点,单实例的Redis会有什么问题呢? 容易导致单点故障,那么如何解决呢? 可以通过主备方式 同时可以实现读写分离 这里的每个节点是全量的,镜像的. 单节点的容量有限而且单点的压力比较大,如 ...

  8. mysql数据库-备份与还原实操

    目录 备份工具 1 基于 LVM 的快照备份(几乎热备) 2 数据库冷备份和还原 3 mysqldump备份工具 3.1 实战备份策略 3.1.1 全备份 3.1.2 分库分表备份 3.2 mysql ...

  9. GO学习-(17) Go语言基础之反射

    Go语言基础之反射 本文介绍了Go语言反射的意义和基本使用. 变量的内在机制 Go语言中的变量是分为两部分的: 类型信息:预先定义好的元信息. 值信息:程序运行过程中可动态变化的. 反射介绍 反射是指 ...

  10. TensorRT-安装-使用

    TensorRT-安装-使用 一.安装 这里 是英伟达提供的安装指导,如果有仔细认真看官方指导,基本上按照官方的指导肯定能安装成功. 问题是肯定有很多人不愿意认真看英文指导,比如说我就是,我看那个指导 ...