数据库学习笔记
前言:由于最近接到需求要设计一个项目的数据库,在设计的过程中,发现数据库的存储过程、视图几乎不了解,而且索引的设置还想再深入研究一下,所以写下这份学习笔记,2019年9月20日17:12:33,fighting~
视图
视图是啥?
视图(子查询):是从一个或多个表导出的虚拟的表,其内容由查询定义。具有普通表的结构,但是不实现数据存储。
对视图的修改:
- 单表视图一般用于查询和修改,会改变基本表的数据;
- 多表视图一般用于查询,不会改变基本表的数据。
视图应用场景?
-
多个地方用到同样的sql查询结果
比如说:我需要查询每个部门平均工资的最高和最低值,那么我首先创建视图存放每个部门平均工资的查询结果,然后直接用select语句去视图里找最大值和最小值。
-
该查询结果使用的sql语句较复杂
视图有啥用?
- 简化了操作,我们可以把经常使用的sql做成一张视图,使用时不需要知道它的查询细节;
- 重用sql语句;
- 保护数据,我们可以不将重要数据添加到视图中,将程序和原始的基表分离;
怎么创建、使用、修改、更新、删除视图?
创建视图
语法:
create view 视图名
as
查询语句;
示例:
--创建视图--
create view v_student as select * from student;
使用视图
语法:
和普通的表一样。
示例:
--从视图中检索数据--
select * from v_student;
可以根据视图创建、使用视图。
修改视图
修改视图有两种方式:
-
使用replace
create or replace view 视图名 as 查询语句;
-
使用alter
alter view 视图名 as 查询语句;
更新视图
有些复杂的视图是不允许修改的,但是不复杂的视图是可以修改的,用update和delete去操作,一定要注意也会对原表也进行修改,这就非常不安全,所以视图一般是不允许修改的,我们要给视图添加权限,只能查询不允许修改。
以下类型的视图是不允许被修改的:
-
包含以下关键字的sql语句:分组函数、distinct、group by、having、union、union all;
-
常量视图;
封装实现查询常量语句的视图,即常量视图
CREATE VIEW view_test1 AS SELECT 3.1415926;
-
select中包含子查询;
CREATE VIEW view_test1 AS SELECT (SELECT MAX(salary) FROM employees)
-
join;
-
from一个没有更新权限的视图表;
-
where子句的子查询引用了from子句中的表
CREATE VIEW view_test1 AS SELECT last_name,email,salary FROM employees WHERE employee_id IN( SELECT manageer_id FROM employees WHERE manager_id IS NOT NULL )
删除视图
语法:
drop view 视图名,视图名;
示例:
--删除视图--
drop view v_student;
参考: