一. 视图简介
- 视图的概念:视图是从一张或者多张表或者其他视图中查询的结果构建出来的虚拟表。
- 特点:
- 同表一样由一系列的行和列组成。
- 数据库中只存放视图的定义,查询的数据并不存放在视图中,这些数据依然存放在表中。
- 数据库中标的数据发生变化,视图中相应的数据也会发生变化。
- 为什么要使用视图:
- 视图能简化用户的操作。将复杂的查询创建成视图,查询时直接使用查询视图,大大的简化了用户的操作难度。
- 视图可以对机密数据提供安全保护,对于表中某些行或者列的数据,不想让某些用户看到,可以使用视图,因为在设计数据库系统时,对不同的用户定义不同的视图,这样就可以对机密数据进行保护。
- 视图还提供了一些数据逻辑独立性
- 数据逻辑独立性:数据库中表结构(添加了字段,或者添加了关系)表结构发生了变化,用户的应用程序不会受影响。
- 视图的结构一旦确定了以后,如果表结构发生变化,对视图没有任何影响,这样视图在一定程度上就提供了对数据的逻辑独立性。
二. 创建视图(三种)
- 语法:create [or replace] view 视图名字
as 查询语句 [with check option]
-
注意: with check option:可选用来限制插入或者更新到视图中的纪录。
-
在单表上面创建视图:将查询emp表中empno,ename,job,sal信息的结果创建视图
-- 创建视图名为 view_emp create or replace view_emp as select empno,ename,job sal from emp
-
查询视图:
select * from view_emp
- 在多张表上创建视图(连接表查询)
-
例如:将查询雇员中的雇员编号,雇员名及所在部门信息创建视图
-- 多表查询 select e.name,e.empno,d.* from emp e join dept d on e.deptno=d.deptno; -- 创建视图 create view view_emp_dept as select e.name,e.empno,d.* from emp e join dept d on e.deptno=d.deptno; -- 查询视图 select * from view_emp_dept;
- 其他视图上创建视图
-
例如:查询视图view_emp_dept中的empno,ename,dname创建新的视图
create view view_emp_dept_new as select empno,ename,dname from view_emp_dept
三. 查看视图
-
show table查看视图(既可以查看表也可以查看视图)
show tables;
-
show table status:
-
语法:show table status [from | in 数据库名称] [like 视图名称]
-
例如:查看视图及表状态
show table status;
-
例如:查看某个库制定视图名称
show table status from test4 like 'view_emp_dept'
- desc查看视图:
-
语法:desc 视图名;
-
例如:查看视图名称为view_emp_dept的机构
desc view_emp_dept
- show create view :
-
例如:查看view_emp
show create view view_emp
- 在views表中查看:在MySQL库中为information_schema中有view表。因为所有的创建的视图都保存在information_schema中。
-
例如:查看views表
select * from information_schema.views where table_name=‘view_emp_dept’
四. 修改视图
-
create or replace:
-- 查看视图 select * from view_emp; -- 修改view_emp视图,去掉sal这个属性 create or replace view view_emp as select empno,ename,job from emp;
-
alter view:
-
语法:alter view 视图名
as 查询语句
[with check option]
-
例如:使用alter view修改视图view_emp_dept
-- 查询view_emp_dept视图 select * from view_emp_dept -- 在视图view_emp_dept中添加雇员入职时间和职位字段 alter view view_emp_dept as select e.empno,e.ename,e.hiredate,e.job,d.* from emp e,dept d where e.deptno=d.deptno
五. 删除视图
-
语法:drop view [if exists] 视图名1, 视图名2
-
例如:
-- 1.创建两个视图 create view view1 as select empno,ename, from emp; create view view2 as select * from dept; -- 2.删除这两个视图 drop view view1,view2;
六. 更新视图
- 更新视图操作包括:添加数据,删除数据,修改数据;因为视图就是一张虚表,数据库只保存视图的定义,并不保存视图的数据,所以我们所做的更新视图操作实质就是对表的添加,修改,删除操作。
- 使用insert语句对视图添加数据
-
查看视图view_emp结构,并向视图插入数据
select * from view_emp; -- 插入数据 inser into view_emp(empno,ename,job) values (888,'lili','manager');
- 修改视图中的数据
-
例如:修改lili的职位为’clerk‘
update view_emp set job='clerk' where ename='lili'
-
删除数据:使用delete进行删除视图中的数据
delete from view_emp where enanme = 'lili';