李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
MySQL存储过程学习笔记
Leefs
2020-04-01 PM
1758℃
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://lilinchao.com/archives/776.html
上一篇
@Transactional注解简单介绍
下一篇
消息队列中点对点与发布订阅区别
评论已关闭
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
NLP
4
标签云
MyBatis
SpringCloudAlibaba
Shiro
JavaWeb
序列化和反序列化
随笔
LeetCode刷题
Zookeeper
Map
字符串
SpringBoot
JavaSE
Azkaban
排序
Kibana
Hbase
SQL练习题
Python
工具
机器学习
ClickHouse
Golang基础
JavaWEB项目搭建
人工智能
散列
VUE
哈希表
FastDFS
线程池
Docker
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭