视图是一个虚拟表,是sql的查询结果,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据,在使用视图时动态生成。视图的数据变化会影响到基表,基表的数据变化也会影响到视图[insert update delete ] ; 创建视图需要create view 权限,并且对于查询涉及的列有select权限;使用create or replace 或者 alter修改视图,那么还需要改视图的drop权限。
控制权限:视图是虚拟的表,为某个表的的部分列创建特定的视图,针对该视图开放访问权限给特性用户,达到该用户只能访问表的偶写特定字段的效果
简化复杂查询:对多表查询创建视图,使用者可以在多表查询的结果视图上进行单表查询操作,简化复杂查询
视图是否能够更新、删除、添加:如果视图与物理表的数据一一对应则可以,如果不对应则不行。 原则上不建议对视图做修改操作
create view 视图名 as select 字段名 from 表名;
#创建单表控制权限视图
CREATE VIEW st_right_ctl AS SELECT st.sno,st.sname,st.sex FROM student AS st WITH READ ONLY;
#使用多表查询结果创建视图
CREATE VIEW mul_tab_sel AS SELECT st.*,sc_tmp.cno,sc_tmp.degree FROM student AS st INNER JOIN (SELECT sc_last.* FROM score AS sc_last INNER JOIN (SELECT sc.cno,AVG(sc.degree) AS avg_degree FROM score AS sc GROUP BY sc.cno) AS sc_avg ON sc_last.cno=sc_avg.cno AND sc_last.degree >= sc_avg.avg_degree) AS sc_tmp ON st.sno=sc_tmp.sno;
#查看视图创建情况
show create view 视图名;
#查询 修改 删除视图
视图的查询 修改 删除和表的语法完全一样,将表名替换为视图名即可
索引是在表的指定列上创建的特殊数据库对象,如果表查询时过滤条件与索引创建的列一致则可以有效提高表的查询效率。没有建立索引的表会进行全表扫描