为什么使用视图?
既然视图存在那就有它存在的必要。换言之,它有优点。
优点:
有优点就有缺点
缺点:
一、视图是什么?
视图是一个虚拟存在的表,和真实表一样是由行和列构成,视图的数据却不存在于数据库中,存在视图中的只是视图的定义。视图中的数据完全来自于表中,是在使用视图时获取的。视图和表的本质在于视图是基于真实表的一张虚拟的表,它的数据来源于真是表的基础上。
打个比方:真实表与视图,就如同一个物体照镜子,真实表就是就是那个物体,视图就是物体映在镜子里的图像。两者虽说在看着一样,但是镜子的图像是虚拟的,当物体改变时,镜子里映射的影像也会改变。
二、创建视图
语法 create view 视图名 as select语句
视图名:视图名必须是唯一命名,新创建的视图名不能和其他的视图名和其他的表名相同
select语句:指的是创建视图的select语句
例如:创建一个视图
select c.last_name, c.first_name, b.dept_name, c.birth_date from dept_emp a, departments b, employees c where a.dept_no = b.dept_no and a.emp_no = c.emp_no;
如果我们要查看查看视图字段情况的的话,可以 采用 describe 视图名
describe v_user;
如果要查看创建视图的SQL,可以 show create view 视图名
show create view v_user;
二、修改视图
一般将视图用于查询而不是更新用的。要更新的话
采用 alter view 视图名 as select语句 也可以先删除再创建
并不是所有的视图都可以更新的,视图定义中存在以下情况,则是不允许更新的
比如,在原视图里减少一个生日字段
alter view v_user as select c.last_name, c.first_name, b.dept_name from dept_emp a, departments b, employees c where a.dept_no = b.dept_no and a.emp_no = c.emp_no;
三、删除视图
那就是 drop view 视图名
drop view v_user;
四、查询视图
如果我们要使用视图查询
select * from v_user;
它等价于
select c.last_name, c.first_name, b.dept_name from dept_emp a, departments b, employees c where a.dept_no = b.dept_no and a.emp_no = c.emp_no;
这样看来视图的确是简化了sql 。