一、视图(view)
1、引入视图
需求:员工表emp的列信息很多,有些信息时个人重要信息(比如薪水sal、补贴comm等),如果我们希望某个用户智能查询emp表的其他信息,有什么办法?SELECT 选择性查找?======》视图
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 ) 信息
-- 创建视图
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;
3、视图的细节讨论
1、创建视图后,到数据库中去看,对应视图只有一个视图结构文件(形式:视图名.frm)
2、视图的数据变化会影响到基表,基表的数据变化也会影响到视图(insert、update、delete)
3、视图中可以再使用视图,数据仍来自基表。
-- 视图的细节
-- 1. 创建视图后,到数据库去看,对应视图只有一个视图结构文件(形式: 视图名.frm)
-- 2. 视图的数据变化会影响到基表,基表的数据变化也会影响到视图[insert update delete ]
-- 修改视图 会影响到基表
UPDATE emp_view01
SET job = 'MANAGER' WHERE empno = 7369
SELECT * FROM emp; -- 查询基表
SELECT * FROM emp_view01
-- 修改基本表, 会影响到视图
UPDATE emp
SET job = 'SALESMAN'
WHERE empno = 7369
-- 3. 视图中可以再使用视图 , 比如从 emp_view01 视图中,选出 empno,和 ename 做出新视图
CREATE VIEW emp_view02
AS
SELECT empno, ename FROM emp_view01
SELECT * FROM emp_view02