41、mysql数据库(存储过程)
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数据库(存储过程)的更多相关文章
- JDBC对MySQL数据库存储过程的调用
一.MySQL数据库存储过程: 1.什么是存储过程 存储过程(英文:Stored Procedure)是在大型数据库系统中,为了完成特定功能而编写的一组的SQL语句集.存储过程经编译存储在数据库中,用 ...
- MySQL数据库----存储过程
存储过程 存储过程包含了一系列可执行的sql语句,存储过程存放于MySQL中,通过调用它的名字可以执行其内部的一堆sql -- 存储过程的优点: -- 1.程序与数据实现解耦 -- 2.减少网络传输的 ...
- 关于MySQL数据库存储过程的感想
以下只是学习路上的浅薄感想,如理解有所偏差,还请有识之士指正! 一.存储过程意义理解 关于存储过程,我的理解是对数据库语言进行编程调用,就像Java代码类编程写一个具有某种特定功能的方法去进行调用一样 ...
- mysql数据库存储过程异常处理
14.1.4 定义条件和处理程序 定义条件和处理程序是事先定义程序执行过程中可能遇到的问题.并且可以在处理程序中定义解决这些问题的办法.这种方式可以提前预测可能出现的问题, 并提出解决办法.这样可以 ...
- MySQL数据库存储过程动态表建立(PREPARE)
PREPARE statement_name FROM sql_text /*定义*/ EXECUTE statement_name [USING variable [,variable...]] / ...
- MySQL数据库中delimiter的作用概述
以下的文章主要是向大家描述的是MySQL数据库中delimiter的作用是什么?我们一般都认为这个命令和存储过程关系不大,到底是不是这样的呢?以下的文章将会给你相关的知识,望你会有所收获. 其实就是告 ...
- mysql之——存储过程 + 游标 + 事务
下面是自己曾经编写过的mysql数据库存储过程,留作存档,以后用到的时候拿来参考. 其中,涉及到了存储过程.游标(双层循环).事务. [说明]:代码中的注释只针对当时业务而言,无须理会. 代码如下: ...
- ava基础MySQL存储过程 Java基础 JDBC连接MySQL数据库
1.MySQL存储过程 1.1.什么是存储过程 带有逻辑的sql语句:带有流程控制语句(if while)等等 的sql语句 1.2.存储过程的特点 1)执行效率非常快,存储过程是数据库的服 ...
- Mysql 数据库无法删除 41 错误
今天删除Mysql 数据库时候,没法删除,直接报错 41: 方法,进入 mysql的安装目录 我的是:D:\tools\Mysql\V76384-01\mysql-advanced-5.6.25-wi ...
随机推荐
- [Python] tkinter 之 Listbox & Combobox
示例: 1 #用户界面 2 import os 3 os.chdir('F:\\spyder_workspace\\ColCal') 4 import Main 5 from tkinter impo ...
- 【CentOS_7】一行shell实现自动清理过期日志
昨日web测试环境登录白屏,慌忙登上机器查看,半天没找到问题. 不知哪根筋不对,df -h 一看 , /dev/sda1 已经100%. 立马 du -sh *,发现log日志有点大. 手工清理后,业 ...
- sed -i 's/Search_String/Replacement_String/g' Input_File sed详细手册
本文列出的十五个例子可以帮助你掌握 sed 命令.如果要使用 sed 命令删除文件中的行,去下面的文章.注意:由于这是一篇演示文章,我们使用不带 -i 选项的 sed 命令,该选项会在 Linux 终 ...
- mysql 无法执行select查询
场景:mysql无法执行select命令查询,对于已存在的数据库,除了mysql.information_schema数据库,其它诸如nova.keystone.cinder等数据库都有此现象. 日志 ...
- Sqoop 安装部署
1. 上传并解压 Sqoop 安装文件 将 sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz 安装包上传到 node-01 的 /root/ 目录下并将其解压 [root@no ...
- Linux服务之nginx服务篇四(配置https协议访问)
一.配置nginx支持https协议访问 编译安装nginx的时候需要添加相应的模块--with-http_ssl_module和--with-http_gzip_static_module(可通过/ ...
- unity中使用Highlighting System v4.0插件给物体添加高亮
插件:Highlighting System v4.0 操作:在摄像机上挂上HighlightingRenderer脚本 脚本目录在\Assets\Plugins\HighlightingSystem ...
- redux 源码浅析
redux 源码浅析 redux 版本号: "redux": "4.0.5" redux 作为一个十分常用的状态容器库, 大家都应该见识过, 他很小巧, 只有 ...
- 灵动微电子ARM Cortex M0 MM32F0010 Timer定时器中断定时功能的配置
灵动微电子ARM Cortex M0 MM32F0010 Timer定时器中断定时功能的配置 目录: 1.Timer1高级定时器Timer3通用定时器Timer14基本定时器简介 2.Timer1高级 ...
- Step By Step(Lua面向对象)
Step By Step(Lua面向对象) Lua中的table就是一种对象,但是如果直接使用仍然会存在大量的问题,见如下代码: 1 Account = {balance = 0}2 function ...