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. Linux查看PCIe版本及速率# lspci -vvv |grep Width -i

    Linux查看PCIe版本及速率 https://www.cnblogs.com/lsgxeva/p/9542975.html# lspci -vvv |grep Width -i # lspci | ...

  2. Jira&Confluence服务器安装

    1.Mysql安装 参考https://confluence.atlassian.com/doc/database-setup-for-mysql-128747.html 创建相应的数据库 CREAT ...

  3. linux安装命令行 图形查看 CPU温度 传感器-20191218

    方法1:命令行sensors # sensorsi350bb-pci-0700Adapter: PCI adapterloc1: +46.0°C (high = +120.0°C, crit = +1 ...

  4. k8s健康检查(9)

    一.默认的健康检查 强大的自愈能力是 Kubernetes 这类容器编排引擎的一个重要特性.自愈的默认实现方式是自动重启发生故障的容器.除此之外,用户还可以利用 Liveness 和 Readines ...

  5. Linux进阶之VMware Linux虚拟机运行提示“锁定文件失败 虚拟机开启模块snapshot失败”的解决办法

    问题1:VMware Linux虚拟机运行提示"锁定文件失败 虚拟机开启模块snapshot失败"的解决办法 非正常关闭虚拟机(例如开关机过程中关掉VMware等操作),再次启动虚 ...

  6. Python对比两个txt文件内容

    difflib模块作为python的标准库模块,无需安装,作用是比对文本之间的差异,且支持输出可读性比较强的html格式.#!coding=utf-8 # 2018-9-19 import sys i ...

  7. Java安全之Cas反序列化漏洞分析

    Java安全之Cas反序列化漏洞分析 0x00 前言 某次项目中遇到Cas,以前没接触过,借此机会学习一波. 0x01 Cas 简介 CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用 ...

  8. 圆盘时钟效果 原生JS

    圆盘时钟 旋转时钟 数字时钟 写在前面 仿荣耀手机时钟,设计的同款时钟效果 实现效果 实现原理 数字时钟 利用Date内置对象获取当下的时间,通过处理呈现在页面上 这一步获取时间是非常简单的,通过Da ...

  9. HTML的一些标签以及表单

    HTML的一些标签以及表单 图片标签 属性 说明 src 图像的路径 alt 图像不能显示时的替换文字 title 鼠标悬停时显示的内容 border 设置图像边框的宽度 align 对齐方式 相对路 ...

  10. 多目标跟踪:CVPR2019论文阅读

    多目标跟踪:CVPR2019论文阅读 Robust Multi-Modality Multi-Object Tracking  论文链接:https://arxiv.org/abs/1909.0385 ...