a) 从三大范式当中,我们知道一张表只存一种实体的数据,但现实业务往往是,需要多个表的数据 关联呈现的,并且某些固定的列会被频繁的访问,视图可以避免频繁的编写这些关联查询语句;
b) 某些人可能只允许表中的部分列,不能将整个表的列或数据行暴露出来,我们可以为这些特定的 人创建一个视图,把权限给到这些人,起到对基表中的其他列和数据行进行安全保护; 视图中存储了可以返回结果集的 sql 查询语句,当用在 from 子句时,内部的 sql 查询语句就会被执行。建的。
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()函数等等。这些系统定义好的函数我们称为系统函数,可以直接拿来使用,但有些时候我们需要完成 特定功能,就需要自己定义函数。用户自己定义的函数,称为自定义函数。本节主要探讨的是自定义函数的使用。
创建函数
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 参数。