MySQL存储过程实战一:函数、视图、存储过程对比以及应用场景

函数、视图及存储过程的对比


函数

  1. 一个函数一般只实现单一的某个功能的;
  2. 函数只能返回一个变量;
  3. 函数不能调用存储过程,但是存储过程可以调用函数。

创建函数的范例:

<code>--#### 自定义字符串分割函数 #####
delimiter $$
DROP FUNCTION IF EXISTS statisSplit;
CREATE FUNCTION statisSplit(x varchar(255), delim varchar(12), pos INT) RETURNS varchar(255)
BEGIN
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),
delim, '');
END
$$/<code>
MySQL存储过程实战一:函数、视图、存储过程对比以及应用场景

视图

视图(view)是一种有结构(有行有列)但是没有结果(结构中不真实存放数据)的虚拟表,虚拟表的结构来源不是自己定义,而是从对应的基表中产生的(视图的数据来源).

简单的说,视图就是将select语句提前存储在数据库中方便使用。视图有以下特点:

  1. 视图可以节省SQL语句,减少复杂SQL语句的解析时间;
  2. 视图创建的时候不能传入动态参数,但是视图是一个虚拟表,调用的时候可以像查表一样输入参数;
  3. 视图只能使用select查询,不能进行更新操作。

视图创建范例:

<code>create view my_search as (
select t2.id as group_id,t2.title as group_title,t1.id as page_id,t1.title as page_title
from tb_view_menu_page t1 left join tb_view_menu_group t2 on t1.group_id = t2.id);

select * from my_search where page_id = 3;/<code>
MySQL存储过程实战一:函数、视图、存储过程对比以及应用场景

存储过程

存储过程是三者当中最复杂的,

  1. 存储过程可以有多个输入输出变量;
  2. 存储过程可以进行select、insert、update以及create table等操作;
  3. 存储过程内部可以调用函数;
  4. 存储过程可以使用游标进行遍历操作。


创建存储过程的基本语法:


MySQL存储过程实战一:函数、视图、存储过程对比以及应用场景


存储过程的应用场景

依照我个人的理解,存储过程适用于复杂的数据库操作场景,当操作包含查询以及多个更新操作的时候。如果你使用代码方式来实现这些操作,由于需要建立多次数据库连接,会导致操作耗时过长,这个时候存储过程就比较有用了,只需建立一次数据库连接就能完成操作。比如,像我使用mysql数据做统计汇总的需求就需要使用存储过程来实现。


分享到:


相關文章: