Java基础89 MySQL存储过程
1、MySQL存储过程
1.1、什么是存储过程
带有逻辑的sql语句;带有流程控制语句(if while)等等 的sql语句
1.2、存储过程的特点
1)执行效率非常快,存储过程是数据库的服务器端执行的。
2)移植性很差,不同数据库的存储过程是不能移植的。
2、存储过程的语法
- -- 创建存储过程
1 DELIMITER $ -- 声明存储过程的结束符- CREATE PROCEDURE pro_test() -- 创建存储过程 存储过程的名称(参数列表)
- BEGIN -- 开始
- -- 这中间可以写多个sql语句 -- sql语句+流程控制等
- END $ -- 结束 结束符
- --执行存储过程
- CALL pro_test(); -- call存储过程的名称(参数)
- -- 存储过程名称里面的参数:
- IN :表示输入参数,可以携带数据存储过程中
- OUT:表示输出参数,可以从存储过程中返回结果
- INOUT:表示输入输出参数,既可以输入功能,也可输出功能
- -- 删除存储过程
- DROP PROCEDURE pro_test; -- 删除存储过程 存储过程的名称;
3、实例演示
3.1、带有参数的存储过程 Java代码调用存储过程的方法:https://www.cnblogs.com/dshore123/p/10582283.html
- -- 需求:传入一个员工的id,查询员工的信息
- DELIMITER $
- CREATE PROCEDURE pro_findById(IN eid INT) -- IN: 输入参数; eid:传入参数的名称; int:传入参数的类型
- BEGIN
- SELECT * FROM employee WHERE id = eid;
- END $
- -- 调用
- CALL pro_findByID(4)
调用pro_findByID() 后的结果图
3.2、带有输出参数的存储过程
- -- 带有输出参数的存储过程
- DELIMITER $
- CREATE PROCEDURE pro_test_out(OUT str VARCHAR(20)) -- out:输出参数
- BEGIN
- -- 给参数赋值
- SET str = 'helloMySQL';
- END $
- CALL pro_test_out(@NAME); -- 调用pro_test_out存储过程
- SELECT @NAME; -- 查询pro_test_out存储过程
- -- 如何返回接收的返回数值
- -- ****mysql的变量******
- -- 全局变量(内置变量):mysql数据库中内置的变量(所有连接都起作用)
- -- 查看所有的全局变量:show variables;
- -- 查看某个全局变量:select @@变量名
- -- 修改全局变量:set 变量名 = 新值
- -- 会话变量:只存在于当前客户端与数据库的一次连接当中;如果断开,那么会话变量将全部失效(丢失)。
- -- 定义会话变量: set @变量 = 值;
- -- 查看会话变量: select @变量;
- -- character_set_client: 服务器的接收编码
- -- character_set_results: 服务器的输出编码
- -- 局部变量:在存储过程中使用的变量就叫局部变量;只要存储过程执行完毕,局部变量就丢失。
结果图
3.3、带有输入输出参数的存储过程
- -- 带有输入输出参数的存储过程
- DELIMITER $
- CREATE PROCEDURE pro_test_InOut(INOUT n INT) -- INOUT: 输入输出参数
- BEGIN
- -- 查看变量
- SELECT n;
- SET n=500;
- END $
- -- 调用
- SET @n=10;
- CALL pro_test_InOut(@n);
- SELECT @n;
结果图
3.4、带有条件判断存储过程
- -- 需求:输入一个整数,如果是1,则返回'星期一';如果是2,则返回'星期二';如果是3,则返回'星期三'。如果是其他,则返回'输入有误'
- DELIMITER $
- CREATE PROCEDURE pro_testIf(IN num INT,OUT str VARCHAR(32))
- BEGIN
- IF num=1 THEN
- SET str = '星期一';
- ELSEIF num = 2 THEN
- SET str = '星期二';
- ELSEIF num = 3 THEN
- SET str = '星期三';
- ELSE
- SET str = '输入错误';
- END IF;
- END $
- CALL pro_testIf(3,@str);
- SELECT @str;
结果图
3.5、带有循环功能的存储过程
- -- 需求:输入一个整数,求和。例如:输入100 ,统计1~100的和
- DELIMITER $
- CREATE PROCEDURE pro_testWhile(IN num INT,OUT result INT)
- BEGIN
- -- 定义一个局部变量 for(int i=1;i<=100;i++)
- DECLARE i INT DEFAULT 1; -- 定义一个局部变量i,int类型,默认值为1。
- DECLARE vsum INT DEFAULT 0; -- 定义一个局部变量vsum,int类型,默认值为0。
- WHILE i <= num DO
- SET vsum = vsum + i;
- SET i = i + 1;
- END WHILE;
- SET result = vsum;
- END $
- CALL pro_testWhile(100,@result);
- SELECT @result;
结果图
原创作者:DSHORE 作者主页:http://www.cnblogs.com/dshore123/ 原文出自:https://www.cnblogs.com/dshore123/p/10559182.html 欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!) |
Java基础89 MySQL存储过程的更多相关文章
- Java基础86 MySQL数据库基础知识
本文知识点(目录): 1.MySQL数据库的概述 2.MySQL数据库的管理[对数据库的操作](查询.删除.创建数据库,以及查询和修改数据库的编码模式) 3.表的管理[对数据库 表的操作] ...
- java, mybatis, 调用mysql存储过程
Map<String, Object> bindinfo = new HashMap<String, Object>(); bindinfo.put(&q ...
- Java基础87 MySQL数据约束
1.默认值 -- 创建表student1,设置address字段有默认值 create table student1 ( id int, name ), address ) default '广东省深 ...
- Java基础之MySQL数据库与JDBC
一.数据库 DBMS 数据库管理系统 是由多个程序构成的专门用来管理大量数据的计算机系统 Server 提供数据存储.检索.计算等服务的网络程序+系统服务 Notifier ...
- Java基础92 MySQL插入当前系统时间
1.时间格式 用yyyy表示年份(year). -- y 表示年的最后一位,yy 表示年的最后2位,yyy 表示年的最后3位,yyyy 用4位数表示年用MM表示月份(month).-- mm 用2位 ...
- Java基础91 mysql的用户权限设置问题
1.概述 1)MySQL数据库中root用户具有最高的权限(超级用户),可以对任何数据库,任何表进行操作. 2)权限账户,只拥有部分权限(CRUD) .例如:只能操作某个数据库的某张表等等. 2.my ...
- Java基础90 MySQL触发器
1.创建触发器 CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt ...
- ava基础MySQL存储过程 Java基础 JDBC连接MySQL数据库
1.MySQL存储过程 1.1.什么是存储过程 带有逻辑的sql语句:带有流程控制语句(if while)等等 的sql语句 1.2.存储过程的特点 1)执行效率非常快,存储过程是数据库的服 ...
- 面试官突然问我MySQL存储过程,我竟然连基础都不会!(详细)
所有知识体系文章,GitHub已收录,欢迎Star!再次感谢,愿你早日进入大厂! GitHub地址: https://github.com/Ziphtracks/JavaLearningmanual ...
随机推荐
- 链表的C/C++实现
一个链表实现,函数声明放在 list.h 头文件汇总,函数定义放在list.cpp 中,main.cpp 用来测试各个函数. 1.文件list.h // list.h #ifndef __LIST_H ...
- wifi 标准
简介 https://smb.pconline.com.cn/1149/11491365.html
- LOJ#6118 鬼牌
\(\rm upd\):是我假了...这题没有爆精...大家要记得这道题是相对误差\(10^{-6}\)...感谢@foreverlasting的指正. 题是好题,可是标算爆精是怎么回事...要写的和 ...
- 【bzoj4771】七彩树 树链的并+STL-set+DFS序+可持久化线段树
题目描述 给定一棵n个点的有根树,编号依次为1到n,其中1号点是根节点.每个节点都被染上了某一种颜色,其中第i个节点的颜色为c[i].如果c[i]=c[j],那么我们认为点i和点j拥有相同的颜色.定义 ...
- BZOJ3434 WC2014时空穿梭(莫比乌斯反演)
考虑枚举相邻点距离差的比例.显然应使比例值gcd为1以保证不重复统计.确定比例之后,各维坐标的方案数就可以分开考虑.设比例之和为k,则若坐标上限为m,该维坐标取值方案数即为Σm-ki (i=1~⌊m/ ...
- bzoj1038
这是一道非常有意思的题目 Description 致力于建设全国示范和谐小村庄的H村村长dadzhi,决定在村中建立一个瞭望塔,以此加强村中的治安.我们将H村抽象为一维的轮廓.如下图所示 我们可以用一 ...
- BZOJ 2440 [中山市选2011]完全平方数 | 莫比乌斯函数
BZOJ 2440 [中山市选2011]完全平方数 | 莫比乌斯函数 题面 找出第k个不是平方数的倍数的数(1不是平方数, \(k \le 10^9\)). 题解 首先二分答案,问题就转化成了求\([ ...
- POJ 2235 Frogger / UVA 534 Frogger /ZOJ 1942 Frogger(图论,最短路径)
POJ 2235 Frogger / UVA 534 Frogger /ZOJ 1942 Frogger(图论,最短路径) Description Freddy Frog is sitting on ...
- js实现数字键盘
效果图: 1.引入jquery.js文件 2.css样式 <style type="text/css"> #numberkeyboard { border: 1px s ...
- MySQL简单查询详解-单表查询
MySQL简单查询详解-单表查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查询的执行路径 一条SQL查询语句的执行过程大致如下图所示: 1>.客户端和服务端通过my ...