您的位置:首页 > 数据库 > MySQL

Mysql学习历程(15)-视图

2017-07-10 16:03 225 查看
视图:view 是一种有行有列的结构,但是没有结果的虚拟表;虚拟表的结构来源不是自己定义,而是从对应的基表中产生;

创建视图

create view  视图名字 as  select 语句;    -- select 语句可以是普通/连接/联合/子查询;

视图基表有多张的情况下,注意字段名不能重复;

create view my_v1 as select * from my_student; 
create view my_v2 as select * from my_class;
create view my_v3 as select s.*,c.number,c.room from my_student_1 s left join my_class c on s.c_id=c.id;


查看视图

查看视图  show tables [like '匹配模式' ]    或者 desc  视图名字 ;

查看视图结构   show create table 视图名;

视图比表有一个关键字的区别:view  ,查看视图的创建语句还可以使用view关键字show create view 视图名;

视图一旦创建,系统会在视图对应数据库文件夹下创建一个对应的结构文件.frm文件;

使用视图:主要是为了查询,将视图当作表一样查询即可;

select * from my_v3;

视图的执行:本质就是执行封装的select 语句;

修改视图:视图本身不可以修改,但是视图的来源是可以修改的;

alter view  视图名字 as  新的select语句;

删除视图:drop view 视图名字;

视图的意义:1.视图可以节省SQL语句,将一条复杂的语句使用视图进行保存,以后可以直接对视图进行操作;

2.数据安全:视图操作主要是针对查询的,如果对视图结构进行处理,不会影响基表数据(相对安全);

     3.视图往往是在大项目中使用,而且是多系统中使用;可以对外提供有效数据,但是隐藏无用数据,数据安全;     4.视图可以提供友好型;

  5.视图可以更好地进行权限控制;

视图数据操作:视图可以进行数据写操作,但是有很多限制;

新增数据:直接对视图进行新增数据,1.多表视图不能新增数据;2.可以向单表视图插入数据,但是视图中包含的字段必须有基表中所有不能为空(或者没有默认值)的字段;3.视图是可以向基表中插入数据;

删除数据:多表视图不能删除数据;

更新数据:单表/多表视图都可以更新数据;

更新限制:with check option 如果对视图在新增的时候,限定了某个字段有限制,那么在对视图进行数据更新操作时,系统会验证;要保证更新之后,数据依然可以被查询出来,否则不让更新;

create view my_v2 as select * from my_student where age>30 with check option;
//with check option决定通过视图更新的时候不能让已得到的数据>30的更新成<30的;

视图算法:

系统对视图以及外部查询视图的select 语句的一种解析方式;

视图算法分为三种,undefined未定义的(默认的),这不是一种实际使用的算法,是一种推卸责任的算法,告诉系统视图没有定义算法;

temptable 临时表算法,系统应该先执行视图的select 语句,后执行外部查询语句;

merge合并算法 系统应该先将视图对应的select语句与外部查询视图的select语句进行合并,然后执行(效率高,常态);

算法指定:在创建视图的时候;create algorithm=指定算法 view 视图名字 as select语句;

视图算法的选择:如果视图的select语句中包含一个查询语句(where,group by, order by,having, limit),而且很有可能顺序比外部查询语句靠后,此时使用算法temptable算法,其他情况不用指定;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: