1.为什么需要视图?
在关系数据库中,将所有的信息放在一个表中管理是非常不合理的。虽然将所有的数据放在一张表中管理起来,对终端用户来说,可能使用起来比较方便,但是数据可能会重复出现。所以需要对表进行规范化,将一个信息放在多个表中进行管理。
当我们要查询表中信息的时候会发现,检索语句随着表数量的增大而变的更加复杂,从而给数据库造成一定的负担,还容易出现错误,效率也比较低。
这个时候我们就需要创建视图来提高效率。
2.视图的本质
视图的本质是将select语句的检索结果以表的形式保存下来,因此有时视图称为假表(伪表)。
视图本身是不包含任何数据的,仅仅从对象中动态的抽取数据,并将数据组织在一起,外表看起来像一个物理表。
3.视图的作用
(1).可以公开表中特定的行或列(控制权限)
可以通过限制用户对表的select操作权限,而仅赋予用户对相应视图的select操作权限,来达到限制用户只能读取表中特定行或列的目的(因为视图中抽取的正是表的特定行或列)。
(2).简化复杂的SQL查询
将经常使用的连接或子查询条件定义成视图,不仅简化SQL语句,当连接或子查询条件发生改变时,因为只用修改视图的定义,可以大大减少代码受影响的代码范围。
(3).可以限制可插入/可更新的值范围
在定义视图时加入【with check option】命令后,在用insert/update命令进行记录的插入/更新时,数据库都会进行检查,不符合视图定义的数据将被限制插入/更新。
4.视图的相关语法
(1).创建视图
以单张表的部分来创建视图
create view view_name (col_1,col_2...col_n) as select语句【with check option】
(2).显示视图
show tables;
和显示表的命令一样,所以创建视图时名字最好以【v_】开头
show tables like 'v\_%';
显示视图内的所有的列信息
show fields from view_name;
(3).查看视图中的信息
select * from view_name;
(4).插入信息到视图
insert into view_name values (data_1,'data_2');
(5).创建视图使用【with check option】命令
在定义视图时如果指定了【with check option】命令,将不能插入或更新不符合视图的检索条件的数据。否则会报错。
不使用【with check option】命令,限制会变的宽松,可能引起不必要的麻烦。建议使用该命令。
(6).删除视图
drop view view_name;