视图:
将select的结果像表一样保留下来的虚表就是视图。
视图不是表,视图中没有保存记录或列中的数据。
视图是一种信息,用于查询记录。
视图的用途:
用户可以按照想要的条件手机某表某列的数据
从用户的角度来看,视图和表在使用上并没有什么区别。和表一样,视图也可以进行select和update。如果更新视图的记录,基表的记录也会更新。
另外,对于一些不能被修改的重要数据,我们可以只让管理员等具有特殊权限的人来操作相关的表,同时再准备了一个收集了无关紧要部分的视图,这样就比较安全。
此外,数据库高级用户可以为初学者创建容易理解的视图来代替不易理解的表,这也是视图的用途之一。
定义视图:
create view 视图名 as select 列名 from 表名 where 条件;
上述语句表示对select的记录create view。
例:员工信息表tb由员工号(id),姓名(name),年龄(age)组成,试着创建没有员工号,只包含姓名和年龄两个列的视图v1。
create view v1 as
select name,age from tb;
通过视图更新列的值:
视图只显示了基表的一部分。因此,如果更新了基表的值,收集并显示基表值的视图的值也会更新。然而,如果更新视图的值,基表的值也会随之更新。
例:将视图v1中姓名为'a'的姓名改为jake
update v1 set name='jake' where name='a';
设置条件创建视图:
例:销售信息表tb:id,sales,month 人员信息表tb1 id ,name ,age
在tb中提取销售额大于等于100万元的记录,创建由id,sales,和name构成的视图v2
create view v2 as
select tb.id,tb1.name,tb1.sales
from tb
join tb1
using (id)
where tb.sales>=100;
在符合视图设置条件的情况下,如果基表更新,视图中的记录也会随之更新。设置了条件的视图始终会显示与条件相匹配的记录。
确认视图:
show tables;
确认存在哪些视图。视图会和表交织在一起。
desc 视图名;//显示视图的列结构
限制通过视图写入:
对视图执行insert和update操作是 有限制的。例如,在使用union,join,子查询的视图中,不能执行insert和update。但是只是从一个表中提取子列,就可以insert和update。
通过设置条件创建基图的插入:
例:销售信息表id,sales,month、以销售额大于等于100万元为条件,创建仅包含销售信息表tb的列id和列salesd 的视图v3
create view v3 as
select id,sales
from tb
where sales>=100;
当向视图中插入不符合视图条件的记录:
insert into v3 values('a',50);
结果:
视图v3显示不出插入的记录,基表tb显示了记录。即当通过视图insert记录时,即使与where条件不匹配,数据也会直接输入到基表中。
但是,对于有条件限制的视图,无条件输入记录有时候会带来一定的麻烦。另外,从视图中输入的记录无法在该视图中确认也是一件很麻烦的事。
为了应对这些情况,可以将视图设置为不接受与条件不匹配的记录。
可以在使用create view 创建视图时,加上with check option
create view v4
as
select id,sales
from tb
where sales>100
with check option;
如果试图插入不符合条件的记录,就会发生错误。
替换视图:
create or replace view v1
as
select..;
or replace删除已经存在同名的视图,创建新的视图。
修改视图结构:
alter view 视图名 as select 列名 from 表名;
通过下面的操作,可以让当前的视图v1中包含表tb1的列和列age
alter view v1
as select name,age
from tb;
删除视图:
drop view 视图名;