李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
MySQL存储过程学习笔记
Leefs
2020-04-01 PM
1338℃
0条
# MySQL存储过程学习笔记 ### 一、基本概念 我们常用的操作数据库语言SQL语句在执行的时候需要先编译,然后执行。而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。 SQL语句一般是零散的,SQL语句如果是一句又一句的话,那么存储过程就好比将这些话以顺序执行、分支执行或循环执行组织起来的文章,这篇文章能够达到一定的目的! ### 二、存储过程的优点 存储过程增强了SQL语言的功能和灵活性。存储过程可以用流程控制语句编写,有很强的灵活性,可以完成复杂的判断和比较复杂的运算。 存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。 存储过程能够减少网络流量。针对同一个数据库对象的操作(如查询、修改),如果这一操作所涉及的Transaction-SQL语句被组织成存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而大大增加了网络流量并降低了网络负载。 存储过程可被作为一种安全机制来充分利用。系统管理员通过执行某一行存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。 ### 三、语法规范 创建存储过程的基本形式如下: ```mysql CREATE PROCEDURE sp_name(proc_parameter) routine_body ``` `sp_name:`参数是存储过程的名称 `proc_parameter:`表示存储过程的参数列表 `routine_body:`参数是SQL代码的内容,用BEGIN...END来标志SQL代码的开始和结束 **实例:** ```mysql create procedure demo(in a int,in b int) begin select a+b; end; call demo(1,2); ``` **删除存储过程:** ```mysql DROP PROCEDURE sp_name; ``` **实例:** ```mysql DROP PROCEDURE demo; ``` **调用存储过程:** Call 存储过程名称(实参列表) **实例:** ```mysql Call demo(); ``` **Java是通过{}封装的,存储过程是通过begin和end封装的。** 在存储过程中声明变量的格式为:declare nwl char(3) default 'mx'; Declare + 变量名称 + 变量类型(数据库变量类型)+ defaultValue; 变量的生命周期为,begin到end之间。变量赋值一定要使用set开头。 实例: ```mysql create procedure test() begin declare nwl char(3) default 'nwl'; begin declare nwl char(3) default 'mx'; select nwl; end; select nwl; end; ``` **和C系语言类似存储过程中也可以控制流程。** 格式为: ```mysql If 条件 then 执行语句 end if If 条件 then 执行语句1 esle 执行语句2 end if ``` 实例: ```mysql create procedure testifesle(in flag int) begin declare myFlag int; set myFlag = flag + 1; if myFlag > 1 then update sc set score = 10 where sno = '01'; end if; if myFlag > 10 and flag > 0 then update sc set score = 20 where son = '02'; else update sc set score = 30 where sno = '02'; end if; end; ``` **存储过程也支持循环操作,和C系语言的while循环类似。** 语法为: ```mysql while 条件 do 执行语句; 条件改变语句; End while; ``` 实例: ```mysql create procedure testwhile(in nwl int) begin declare mynwl int default 0; set mynwl = nwl + 1; while mynwl < 10 do update sc set score = 100 where sno = '01'; set mynwl = mynwl + 1; end while; end; ``` ### 四、实例与应用场景 存储过程最大的作用就是实现多条sql语句的封装从而实现一定的业务逻辑,从互联网公司角度来看,确实很少使用存储过程实现业务逻辑。但是在电信业、银行业、金融方面以及国企都普遍使用存储过程来实现业务逻辑。 把业务逻辑要交给应用程序处理,这样可以减少数据库资源消耗。把业务逻辑写到存储过程不利于系统分层设计和维护,更不利于数据库的迁移。那为什么还要使用存储过程呢: > 1、执行速度快,因为存储过程不需要解析,预先编译了。 > > 2、安全性,避免了SQL注入,避免了暴露表结构和字段。 > > 3、方便分工,程序实现人员可以专注于业务逻辑实现,DBA(数据库逻辑员)专注于SQL编写和优化! 所以如果你做的是业务逻辑十分复杂,sql语句十分复杂,sql封装要求较高的系统,可以选用存储过程,尤其是公司有DBA(数据库管理员)的情况下,使用存储过程实现分工效率是非常高的。 ### 五、问答题 1、什么是存储过程? 2、存储过程是怎么创建的? 3、存储过程语法有哪些? 4、你们公司是怎么使用存储过程的?
标签:
MySQL
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://www.lilinchao.com/archives/776.html
上一篇
@Transactional注解简单介绍
下一篇
消息队列中点对点与发布订阅区别
取消回复
评论啦~
提交评论
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
标签云
HDFS
Sentinel
Elasticsearch
Spark Core
机器学习
国产数据库改造
VUE
ajax
Java工具类
Nacos
MyBatis-Plus
SpringCloudAlibaba
Java编程思想
CentOS
MyBatis
链表
Golang基础
Java阻塞队列
Elastisearch
Jquery
Stream流
Map
SpringBoot
Spark
Hbase
排序
NIO
FastDFS
递归
Ubuntu
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞