视图
视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。视图具有表结构文件,但不存在数据文件。
对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图。通过视图进行查询没有任何限制,通过它们进行数据修改时的限制也很少。
视图是存储在数据库中的查询的sql语句,它主要出于两种原因:安全原因,视图可以隐藏一些数据,如:用户银行卡信息,可以用视图只显示姓名,用户手机号,而不显示银行卡账号、金额等,另一原因是可使复杂的查询易于理解和使用。
- 创建视图
命令格式:create [or replace] [algorithm = {undefined | merge | temptable}] [definer = {用户名| current_user}] [sql security {definer | invoker }] view 视图名称 [(column_list)] as select_statment [with [cascaded | local] check option];
ex:
#登录mysql
mysql -uroot -proot
#使用数据库
use demo;
#为student表创建名为student_view的视图
create algorithm = temptable definer=current_user sql security definer view sudent_view(name,age,gender) as select name,age,gender from student;
#查看student_view视图结构
show create view student_view;
ps:视图名必须唯一,同时不能与表重名。 视图可以使用select语句查询到的列名,也可以自己指定相应的列名。可以指定视图执行的算法,通过algorithm指定。column_list如果存在,则数目必须等于select语句检索的列数
- 查看视图结构
命令格式: show create view 视图名称
ex:
#查看student_view结构
show create view student_view;
#查看数据库中有哪些视图,table_type中类型是view
show full tables;
- 删除视图
命令格式: drop view [if exists] 视图名称,.....
删除视图后,数据依然存在。可同时删除多个视图。
#删除student_view,teacher_view
drop view if exists student_view,teacher_view;
- 修改视图结构
命令格式: alter view 视图名称 [(字段列表)] as select_statement;
ex:
#创建student视图
create view student_view as select * from student;
#修改视图结构
alter view student_view as select id,name,age,gender from student;
ps: 一般不修改视图,因为不是所有的更新视图都会映射到表上。
-
视图作用
- 简化业务逻辑
- 对客户端隐藏真实的表结构
视图算法(algorithm)
算法 | 名称 | 解释 |
---|---|---|
merge | 合并 | 将视图的查询语句,与外部查询需要先合并再执行! |
temptable | 临时表 | 将视图执行完毕后,形成临时表,再做外层查询! |
undefined | 未定义(默认) | 指的是MySQL自主去选择相应的算法。 |