mysql 视图 函数

  • 视图简介:

  • 为什么要使用视图?
    我们知道一张表只存一种实体的数据,但现实业务往往是,需要多个表的数据关联呈现的,并且某些固定的列会被频繁的访问,视图可以避免频繁的编写这些关联查询语句;

  • 什么是视图?
    视图就是一个虚拟表,视图的内容由我们想要什么数据来决定,。同真实的表一样,视图包含一系列带有名称的列和行数据。
    但是,视图并不在数据库中以存储的数据值集形式存在。

  • 视图的优点:
    简单化,数据所见即所得;
    安全性,用户只能查询或修改他们所能见到得到的数据;
    逻辑独立性,可以屏蔽真实表结构变化带来的影响。

  • 视图的缺点:
    性能相对较差,从视图查询数据可能会很慢,特别是如果视图是基于其他视图创建的;
    修改不方便,特别是复杂的聚合视图基本无法修改。

  • 视图的使用:
    基于单表创建视图
    创建视图,显示学生姓名,年龄,班级,

-- 创建视图
create view view6
AS
select studentName,gender,age,classid
from studentinfo;
-- 调用视图
select * from view6;

调用视图运行结果:
在这里插入图片描述
创建视图的语法只是在原来的 select 语句前添加“create view 视图名 as”就可以了。

  • 使用別名的视图
-- 起别名方式创建视图
create view view7(姓名,性别,年龄,班级)
AS
select studentName,gender,age,classid
from studentinfo;
-- 视图查询
select * from view7;

结果:
在这里插入图片描述

  • 基于多表创建视图
-- 两个表连接查询  学生表 班级表
create view view8
as select studentName,gender,age,className 
from studentinfo inner join classinfo
on studentinfo.ClassID=classinfo.ClassID;
-- 调用视图信息
select * from view8;

结果:
在这里插入图片描述

  • 使用视图更新数据
    视图不仅是可查询的,而且是可更新的。这意味着您可以使用 INSERT 或 UPDATE 语句通过可
    更新视图插入或更新基表的行。
    但是,要创建可更新视图,定义视图的 SELECT 语句不能包含以下任何元素:
    聚合函数;
    distinct 子句;
    group by 子句;
    having 子句;
    union 和 union all 子句;
    外连接
    注意:不建议使用基于多表创建的视图进行更新
    基于视图 view6修改学生年龄,让学生年龄都+1
-- 通过视图查询
select * from view6;
-- 通过 view6 修改学生年龄
update view6 set age = age+1;
-- 查询学生表
select studentname,age from studentinfo;

结果:
在这里插入图片描述
年龄都加了一岁

  • with check option 子句
    基于 subject 表创建一个查询课时数大于 24 的所有课程的视图 view4,然后通过 view4 视图插入一个新课程“java 基础”,课时数为 20
-- 创建视图
create view view4
as
select * from subject where CreditHour>24;
-- 通过视图查询
select * from view4;
-- 通过视图添加新课程
insert into view4 values(null,'java 基础',20,1,1);
-- 通过视图查询
select * from view4;
-- 查询课程表
select * from subject;

插入“java 基础课程后”,通过视图查询结果:
在这里插入图片描述
可以看到,新插入的课程在视图中是查不到的,为了确保视图的一致性,用户只能显示或更新通过视图可见的数据,则在创建或修改视图时使用 WITH CHECK OPTION。

  • 修改
-- 修改视图
alter view view4
as
select * from subject where CreditHour>24 with check option;
-- 通过视图添加新课程
insert into view4 values(null,'layui',20,1,1);

插入时因为课时数不满足视图筛选条件,会直接报错
在这里插入图片描述

  • 视图管理:
    查看视图:
show create view view6;

修改替换视图
使用 alter view 替换 create view 就可以实现视图的修改操作

  • 删除视图
    drop view 视图名称;
    - 函数:
    函数简介:MySQL 中的函数和 JavaScript 中的函数作用类似,就是执行特定任务的代码块。
    函数的使用:
    创建函数的语法:
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();

結果:
在这里插入图片描述
注意语法中的几个要点:
1 函数名后面有一对小括号,括号内可以填写或不填参数,但括号不能省略;
2小括号后必须跟 returns,returns 后跟返回值类型,类型必须是 MySQL 中的类型;
3 函数主体放在 begin…end 内,end 前要 return 与前面 returns 后跟的类型相同的值;
4 select 查询结果也可以用来给变量赋值,但是需要用 into 关键词

  • 创建一个带参数的函数,输入学号,返回学生姓名
-- 创建函数
create function myfun2(sid varchar(20)) returns varchar(20)
begin
declare name varchar(20);
select studentname into name from studentinfo where studentid=sid;
return name;
end;
-- 调用函数
select myfun2('2011001002');

在这里插入图片描述
函数与过程的区别
函数和过程统称为存储在数据库中的实现特定功能的代码块,但是它们之间也有一些区别:
1 返回值不同:函数必须有返回值,且仅返回一个结果值;过程可以没有返回值,但是能返回结果集;
2 调用时的不同:函数使用 select 进行调用;过程使用 call 进行调用;
3 参数的不同:函数的参数都是 in 参数;过程可以传递 in\out\inout 参数。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值