函数、视图及存储过程的对比
函数
- 一个函数一般只实现单一的某个功能的;
- 函数只能返回一个变量;
- 函数不能调用存储过程,但是存储过程可以调用函数。
创建函数的范例:
<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>
视图
视图(view)是一种有结构(有行有列)但是没有结果(结构中不真实存放数据)的虚拟表,虚拟表的结构来源不是自己定义,而是从对应的基表中产生的(视图的数据来源).
简单的说,视图就是将select语句提前存储在数据库中方便使用。视图有以下特点:
- 视图可以节省SQL语句,减少复杂SQL语句的解析时间;
- 视图创建的时候不能传入动态参数,但是视图是一个虚拟表,调用的时候可以像查表一样输入参数;
- 视图只能使用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>
存储过程
存储过程是三者当中最复杂的,
- 存储过程可以有多个输入输出变量;
- 存储过程可以进行select、insert、update以及create table等操作;
- 存储过程内部可以调用函数;
- 存储过程可以使用游标进行遍历操作。
创建存储过程的基本语法:
存储过程的应用场景
依照我个人的理解,存储过程适用于复杂的数据库操作场景,当操作包含查询以及多个更新操作的时候。如果你使用代码方式来实现这些操作,由于需要建立多次数据库连接,会导致操作耗时过长,这个时候存储过程就比较有用了,只需建立一次数据库连接就能完成操作。比如,像我使用mysql数据做统计汇总的需求就需要使用存储过程来实现。
閱讀更多 碼農的日常生活 的文章