1.视图(view)
-
看一个需求
emp表的列信息很多,有些信息是个人重要信息(比如:sal、comm、mgr、hiredate),如果我们希望某个用户只能查询emp表的empno、enamel、job和deptno信息,有什么办法呢?
答案是使用视图。
1.1基本原理
-
视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含列,其数据来自对应的真实的表(基表)
视图和基表关系的示意图:
-
对视图的总结
- 视图是根据基表(可以是多个基表)来创建的,视图是虚拟的表
- 视图也有列,数据来自基表
- 通过视图可以修改基表的数据
- 基表的改变也会影响到视图的数据
1.2视图使用细节
- 语法
1. create view 视图名 as select 语句 -- 创建一个视图 |
|
2. alter view 视图名 as select 语句 -- 修改视图,更新成新的视图 |
|
3. show create view 视图名 -- 显示创建视图的指令 |
|
4. drop view 视图名1[,视图名2,...] -- 删除视图 |
例子
完成前面提出的需求
创建一个视图emp_view01,只能查询emp表的empno、ename、job和deptno列的信息
SELECT * FROM emp; |
|
-- 创建一个视图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 empno, job FROM emp_view01; |
|
-- 显示创建视图的指令 |
|
SHOW CREATE VIEW emp_view01; |
|
-- 删除视图 |
|
DROP VIEW emp_view01; |
- 视图细节讨论
-
创建视图后,到数据库去看,对应的视图只有一个视图结构文件(形式:视图名.frm)
视图的数据只是来源于基表,本身是没有数据的(一个映射关系)
-
视图的数据变化会影响到基表,基表的数据变化也会影响到视图 [insert,delete,update]
-
视图中可以再使用视图,数据仍然来自基表
-- 视图细节讨论 |
|
-- 1. 创建视图后,到数据库去看,对应的视图只有一个视图结构文件 |
|
-- (形式:视图名.frm) |
|
-- 2. 视图的数据变化会影响到基表 [insert,delete,update] |
|
UPDATE |