三. 视图与函数
1.视图
-
视图简介
- MySQL 视图是一个虚拟表,其内容由查询定义。
- 视图包含一系列带有名称的列和行数据。
- 视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表。
- 优点:
- 简单化,数据所见即所得;
- 安全性,用户只能查询或修改他们所能见到得到的数据;
- 逻辑独立性,可以屏蔽真实表结构变化带来的影响。
- 缺点:
- 性能相对较差,从视图查询数据可能会很慢,特别是如果视图是基于其他视图创建的;
- 修改不方便,特别是复杂的聚合视图基本无法修改
-
视图使用
2.1单表使用创建视图
-- 创建视图 create view view1(名字,性别,年龄) as select stuname,Gender,age from stuinfo; -- 通过视图查询 select * from view1;
2.2多表链接查询视图
-- 多表查询视图 -- create view 自定义名称 -- as 链接查询 create view view3 as select stuname,Gender,age,classname from stuinfo s inner join class c on s.classid = c.ClassID; -- 通过视图查询 select * from view3;
2.3视图更新数据
-
可以使用 DELETE 语句通过视图删除底层表的行同时更新也是底层的表
-
创建可更行视图:定义视图的 SELECT 语句不能包含以下任何元素
- 聚合函数;
- distinct 子句;
- group by 子句;
- having 子句;
- union 和 union all 子句;
- 外连接
-- 以创建的view1 -- 视图字段别名进行修改没有设置别名的无关 update view1 set age = age + 1;
-
WITH CHECK OPTION 子句
更新或添加,可看见的数据或者满足条件的数据
-- 创建视图无WITH CHECK OPTION create view view4 as select * from course where TNO> 200; -- 查询 SELECT * FROM VIEW4 -- 可以添加 INSERT INTO VIEW4 VALUES('6-666','java基础',190); -- 修改视图 alter view view4 as select * from course where TNO>200 with check option; -- 无法添加不满足条件 INSERT INTO VIEW4 VALUES('6-656','java开发',190);
-
-
视图管理
3.1查看视图 view1 的定义
show create view view1;
3.2视图与表一样
show tables --查询表与视图
3.2删除视图
drop view 视图名
2.函数
-
函数简介
- MySQL 中的函数和 JavaScript 中的函数作用类似,就是执行特定任务的代码块。
-
函数与过程的区别
- 函数名后面有一对小括号,括号内可以填写或不填参数,但括号不能省略;
- 小括号后必须跟 returns,returns 后跟返回值类型,类型必须是 MySQL 中的类型;
- 函数主体放在 begin…end 内,end 前要 return 与前面 returns 后跟的类型相同的值;
- select 查询结果也可以用来给变量赋值,但是需要用 into 关键词。
-
函数使用
创建函数
-- 语句 create function 函数名([参数列表]) returns 数据类型 begin sql 语句; return 值; end;
-- 应用 CREATE FUNCTION myfun(sid VARCHAR(20)) RETURNs varchar(20) BEGIN -- 定义返回值 DECLARE name VARCHAR(20); -- SQL 关键字:into 返回值 SELECT cityName INTO name FROM city WHERE id=sid; -- 返回 RETURN name; END -- 使用函数 SELECT myfun('1');
查询函数
show function STATUS;
删除函数
drop function 函数名;