一、介绍
看一个需求
emp表里的列信息很多,有些信息是个人重要信息(比如sal,comm,mgr,hiredate),如果我们希望某个用户只能查询emp表的(empno,ename,job,deptno)信息,有什么办法 =》视图
二、视图的使用
(1)创建视图后,到数据库去看,对应视图只有一个视图结构文件(视图名.frm)
(2)视图的数据变化会影响到基表,基表的数据变化会影响到视图【insert update delete】
(3)视图中可以再使用视图,比如从emp_view01视图中,选出empno,ename做出新视图,数据仍然来自基表
#演示视图的使用
-- 创建一个视图emp_view01,只能查询emp表的(empno\ename\job和deptno)信息
-- 创建视图
CREATE VIEW emp_view01
AS
SELECT empno,ename,job,deptno FROM emp;
DESC emp_view01;
SELECT * FROM emp_view01;
SELECT deptno,ename FROM emp;
-- 更新生成的视图,ater view 视图名 as select 语句
-- show create view 视图名 查看视图
SHOW CREATE VIEW emp_view01;
-- 删除视图
DROP VIEW emp_view01;
-- 视图的细节
-- 1、创建视图后,到数据库去看,对应视图只有一个视图结构文件(视图名.frm)
-- 2、视图的数据变化会影响到基表,基表的数据变化会影响到视图【insert update delete】
-- 修改视图
UPDATE emp_view01
SET job='manager'
WHERE empno=7369;
SELECT * FROM emp;
UPDATE emp
SET job='CLERK'
WHERE empno=7369;
SELECT * FROM emp_view01;
-- 3、视图中可以再使用视图,比如从emp_view01视图中,选出empno,ename做出新视图,数据仍然来自基表
DESC emp_view01;
CREATE VIEW emp_view02
AS
SELECT empno,ename FROM emp_view01;
SELECT * FROM emp_view02;
**
三、案例
**
对3的解释
-- 案例
-- 针对emp,dept,salgrage 三表,创建一个视图emp_view03,可以显示雇员编号,雇员名,雇员部门号,和薪水级别
CREATE VIEW emp_view03
AS
SELECT empno,ename,dname,grade
FROM emp,dept,salgrade
WHERE emp.deptno=dept.deptno AND
(sal BETWEEN losal AND hisal);
DESC emp_view03;
SELECT * FROM emp_view03