MYSQL高级----视图.函数

一、为什么要使用视图?

a) 从三大范式当中,我们知道一张表只存一种实体的数据,但现实业务往往是,需要多个表的数据 关联呈现的,并且某些固定的列会被频繁的访问,视图可以避免频繁的编写这些关联查询语句;
b) 某些人可能只允许表中的部分列,不能将整个表的列或数据行暴露出来,我们可以为这些特定的 人创建一个视图,把权限给到这些人,起到对基表中的其他列和数据行进行安全保护; 视图中存储了可以返回结果集的 sql 查询语句,当用在 from 子句时,内部的 sql 查询语句就会被执行。建的。

二、什么是视图?

MySQL 视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。 但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在 引用视图时动态生成。

三.视图的优点

视图的优点:
 简单化,数据所见即所得;
 安全性,用户只能查询或修改他们所能见到得到的数据;
 逻辑独立性,可以屏蔽真实表结构变化带来的影响。
视图的缺点:
 性能相对较差,从视图查询数据可能会很慢,特别是如果视图是基于其他视图创建的;
 修改不方便,特别是复杂的聚合视图基本无法修改。

四.MySQL 中视图的使用:

创建视图,显示学生姓名、性别、年龄和所在班级编号

-- 创建视图 create view view1 as select studentName,gender,age,classid 
from studentinfo; 
-- 通过视图查询 
select * from view1;

创建视图,显示学生姓名、性别、年龄和所在班级编号,并以中文表头显示

-- 创建视图 
create view view2(姓名,性别,年龄,班级编号) 
as 
select studentName,gender,age,classid 
from studentinfo; 
-- 通过视图查询 
select * from view2;

函数

函数简介
MySQL 中的函数和 JavaScript 中的函数作用类似,就是执行特定任务的代码块。 其实,大家已经有过在 MySQL 中使用函数的经验了,比如我们获得系统时间,可以用 now()函数,求平均值 可以用 avg()函数等等。这些系统定义好的函数我们称为系统函数,可以直接拿来使用,但有些时候我们需要完成 特定功能,就需要自己定义函数。用户自己定义的函数,称为自定义函数。本节主要探讨的是自定义函数的使用。

MySQL 中函数的使用

创建函数

create function 函数名([参数列表]) returns 数据类型
begin 
sql 语句;
 return; 
 end;

创建一个函数,返回学号为“2011001004”的学生姓名

-- 创建函数 
create function myfun1() returns varchar(20) 
begin
declare name varchar(20); 
select studentname into name from studentinfo 
where studentid='2011001004'; 
return name;
 end; 
 -- 调用函数 
 select myfun1();

创建一个带参数的函数,输入学号,返回学生姓名

-- 创建函数 
create function myfun2(sid varchar(20)) returns varchar(20) begindeclare name varchar(20); 
select studentname into name from studentinfo 
where studentid=sid; 
return name; end; 
-- 调用函数 
select myfun2('2011001002');

注意语法中的几个要点:
1.函数名后面有一对小括号,括号内可以填写或不填参数,但括号不能省略;

2.小括号后必须跟 returns,returns 后跟返回值类型,类型必须是 MySQL 中的类型;

3.函数主体放在 begin…end 内,end 前要 return 与前面 returns 后跟的类型相同的值;

4.select 查询结果也可以用来给变量赋值,但是需要用 into 关键词。

函数与过程的区别

1.返回值不同:函数必须有返回值,且仅返回一个结果值;过程可以没有返回值,但是能返回结果集;

2.调用时的不同:函数使用 select 进行调用;过程使用 call 进行调用;

3.参数的不同:函数的参数都是 in 参数;过程可以传递 in\out\inout 参数。

你可能感兴趣的:(mysql)