存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的-种数据库对象。

存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。

其实存储过程思想上很简单,就是数据库SQL语言层面的代码封装与重用。

优缺点分析:

优点:
1.存储过程可封装, 并隐藏复杂的商业逻辑。
2.存储过程可以回传值,并可以接受参数。
3.存储过程无法使用 SELECT指令来运行,因为它是子程序,与查看表,数据表或用户定义函数不同。
4.存储过程可以用在数据检验, 强制实行商业逻辑等。

缺点
1.存储过程,往往定制化于特定的数据库上,因为支持的编程语言不同。当切换到其他厂商的数据库系统时,需要重写原有的存储过程。
2.存储过程的性能调校与撰写,受限于各种数据库系统。

语法
在linux系统下操作Mysql:

1.先进入数据库
mysql -u root -p 1234

2.声明结束符号,语句的结束符号从分号;临时改为一个$(可以是自定义)
delimiter $

3.声明存储过程:
create procedure proc_demo(in p_ in int)

4.变量定义:
declare id_int int unsigned default 1001

变量赋值
set useid=1

5.存储过程开始和结束符号:
begin end

6.创建mysql存储过程:
create procedure 存储过程名(参数)

7.调用存储过程:
call 存储过程名(赋值)

8.MySQL存储过程的查询,查看某个数据库下面的存储过程
select name from mysql.存储过程名 where db='数据库名’

show procedure status where db=‘数据库名’;

9.查看存储过程的详细信息
show create procedure 数据库.存储过程名

10.MySQL存储过程的修改
alter procedure 存储过程名

11.MySQL存储过程的删除
drop procedure 存储过程名

12.条件语句

  1. if-then-else 语句
delimiter //
mysql > create procedure proc2(IN parameter int)  -> begin -> declare var int;  -> set var=parameter+1;  -> if var=0 then -> insert into t values(17);  -> end if;  -> if parameter=0 then -> update t set s1=s1+1;  -> else -> update t set s1=s1+2;  -> end if;  -> end;  -> //
mysql > delimiter ;

2.case 语句

mysql > delimiter //
mysql > create procedure proc3 (in parameter int)  -> begin -> declare var int;  -> set var=parameter+1;  -> case var  -> when 0 then   -> insert into t values(17);  -> when 1 then   -> insert into t values(18);  -> else   -> insert into t values(19);  -> end case;  -> end;  -> //
mysql > delimiter ;
casewhen var=0 theninsert into t values(30);when var>0 thenwhen var<0 thenelse
end case

13.循环语句
1.while ···· end while
while 条件 do
–循环体
end while

mysql > delimiter //
mysql > create procedure proc4()  -> begin -> declare var int;  -> set var=0;  -> while var<6 do  -> insert into t values(var);  -> set var=var+1;  -> end while;  -> end;  -> //
mysql > delimiter ;

2.repeat···· end repea
它在执行操作后检查结果,而 while 则是执行前进行检查。
repeat
–循环体
until 循环条件
end repeat;

mysql > delimiter //
mysql > create procedure proc5()  -> begin   -> declare v int;  -> set v=0;  -> repeat  -> insert into t values(v);  -> set v=v+1;  -> until v>=5  -> end repeat;  -> end;  -> //
mysql > delimiter ;

3.loop ·····end loop
loop 循环不需要初始条件,这点和 while 循环相似,同时和 repeat 循环一样不需要结束条件, leave 语句的意义是离开循环。

mysql > delimiter //
mysql > create procedure proc6()  -> begin -> declare v int;  -> set v=0;  -> LOOP_LABLE:loop  -> insert into t values(v);  -> set v=v+1;  -> if v >=5 then -> leave LOOP_LABLE;  -> end if;  -> end loop;  -> end;  -> //
mysql > delimiter ;

14.MySQL存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT

IN 输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)
OUT 输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)
INOUT 输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)

参数定义可以是一个,可以是两个,也可以是三个

创建存储过程案例

  delimiter $create procedure proc_demo(in usid integer)begindelete from userinfos where userid=:usid;end$delimiter ;
call proc_demo(2);   call调用存储过程并传参

注意
begin end 之间可以是SQL语句,也可以给变量赋值;
当sql中参数的值要去赋值时语法必须是 sql参数=: 传参
如果存储过程没有参数,也必须在过程名后面写上小括号

delimiter $
create procedure proc_sum(in num1 integer,in num2 integer,out sums integer)beginset sums=num1+num2; end$delimiter ;

解析
在存储过程中设置了需要传参的变量num1和num2,调用存储过程的时候,通过调用存储过程call proc_sum()传参将值给num1和num2,然后进行存储过程里的SQL操作。

用java调用存储过程
导Mysql依赖包

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.38</version>
</dependency>
@SpringBootApplication
@EnableScheduling
public class ConnMySql (
public static void main (String[] args) throws Exception{// 1.加载驱动Class.forName ("com.mysql.jdbc.Driver") ;try{// 2.连接数据库Connection conn = DriverManager.getConnection("jdbc:mysql://192.168.56.44:3306/tpshop","root","1234") ;//3.调用存储过程CallableStatement cstmt = conn prepareCall ("(call proc_sum(?,?,?) )")//call proc_sum(?,?,?)  调用的存储过程中有3个参数,用3个?表示}catch{//第一个参数是in输入型cstmt.setInt (1, 4);//第二个参数是in输入型   cstmt.setInt (2,5);    //注册输出参数//第3个参数是输出型,用来接收out结果cstmt.registerOutParameter(3, Types.INTEGER) ;  cstmt.execute () ;System.out.println ( "执行结果是: "+cstmt.getInt(3));cstmt.close();}
}
}

Mysql存储过程语法讲解,以及如何用Java调用!相关推荐

  1. MySQL存储过程语法

    MySQL存储过程语法 1.语法结构 2.变量及赋值 2.1.局部变量 2.2.用户变量 2.3.全局变量: 3.出参和入参 4.流程控制 4.1.判断 4.1.1.IF 4.1.2.CASE 4.2 ...

  2. mysql的存储过程正负数的变化_《转》mysql存储过程语法及范例

    <转>mysql存储过程语法及实例 存储过程如同一门程序设计语言,同样包含了数据类型.流程控制.输入和输出和它自己的函数库. --------------------基本语法------- ...

  3. mysql存储过程语法 if_mysql存储过程语法 if

    MySql存储过程 MySQL 存储过程是从 MySQL 5.0 开始增加的新功能.存储过程的优点有一箩筐.不过最主要的还是执行效率和SQL 代码封装.特别是 SQL 代码封装功能,如果没有存储过程, ...

  4. mysql存储过程语法及实例

    存储过程如同一门程序设计语言,同样包含了数据类型.流程控制.输入和输出和它自己的函数库. --------------------基本语法-------------------- 一.创建存储过程 c ...

  5. mysql存储过程语法大全

    http://dev.mysql.com/doc/refman/5.1/zh/stored-procedures.html#flow-control-constructs 第20章:存储程序和函数 目 ...

  6. mysql存储过程语法错误1064_mysql,dos下执行SQL语句创建存储过程出错ERROR 1064 (42000):...

    update1.sql的内容为 DROP PROCEDURE IF EXISTS pcName; CREATE PROCEDURE pcName() BEGIN select 'a'; END; do ...

  7. mysql存储过程语法和游标的语法_MySQL游标存储过程-语法点滴

    CREATE PROCEDURE my_proc() BEGIN -- 需要定义接收游标数据的变量 DECLARE sname VARCHAR(100); DECLARE cattype VARCHA ...

  8. java epson_如何用Java调用Epson TM-U220PD来打印USB端口

    我正试图在Windows 7中的EPSON TM-U220PD上打印,我用Java做它 . 我正在开发一个餐厅打印订单的软件 . 我在Linux上做了软件,当我在linux上连接打印机时,打印机工作得 ...

  9. 如何用java调用 Python开发的算法模型

    Hprose是一个高性能的远程对象服务引擎. 它是一个现代的.轻量级的.跨语言的.跨平台的.面向对象的.高性能的.远程动态通信中间件.它不仅易于使用,而且功能强大.你只需要一点时间来学习,就可以用它轻 ...

最新文章

  1. combobox 怎么实现对listview的类别查询_通过 Django Pagination 实现简单分页
  2. java实现excel文件上传_java相关:SpringMVC下实现Excel文件上传下载
  3. docker安装和配置Grafana
  4. golang ffmpeg 做网络直播
  5. 贪心只能过样例 loj515
  6. [vue-cli]怎么使用vue-cli3创建一个项目?
  7. JAVA中用于处理字符串的 三兄弟
  8. DG导入mysql依赖包_mysql 命令行快速导出数据,导入数据
  9. java gc_Java GC的那些事(1)
  10. 类对象模型实验:类数据成员大小
  11. JAVA实现126邮箱发送及部署后发送邮箱报错问题
  12. 五款超级易用的网络监控软件
  13. MacOS下无屏幕通过共享WiFi的方式为树莓派4B安装64-bit系统
  14. 如何搭建属于自己的腾讯云服务器
  15. C#调用C++ dll中uchar*参数
  16. python中的copy()与deepcopy()
  17. 形容人的内核是什么意思_请问甜文的内核是什么?
  18. java存款取款程序_JAVA实现账户取款和存款操作
  19. 如何提高 matlab 计算速度 运算效率
  20. Linux 的信号量

热门文章

  1. 收集oracle统计信息
  2. 原生js实现地址选择组件(三级联动)
  3. 【Axure高保真原型】下拉分级选择器
  4. 无公网IP使用node-red和server酱开源版wecomchan实现微信推送消息
  5. javascript数组遍历
  6. windows10 修改用户名全局生效--最有效快速的办法
  7. 2022-2028全球及中国先进LTE测试设备行业研究及十四五规划分析报告
  8. Android可以使用的直播流播放器Vitamio5.2.3
  9. 计算机网络与电竞的论文,谈谈电子竞技毕业论文.doc
  10. 英特尔实感SDK 代码示例