二十一、MySQL视图

一、Mysql视图
1.1 什么是mysql视图
虚拟表;内容与真实的表相似,包含一系列带有名称的列和行数据;视图并不在数据库中以存储的数据的形式存在;行和列的数据来自定义视图时查询所引用的基表,并且在具体引用视图时动态生成;更新视图的数据,就是更新基表的数据;更新基表数据,视图的数据也会跟着改变
1.2 视图优点
简单:使用视图的用户完全不需要关心视图中的数据是通过什么查询得到的。视图中的数据对用户来说已经是过滤好的符合条件的结果集。
安全:用户只能看到视图中的数据。
数据独立:一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响。
使用视图的限制
不能在视图上创建索引;在视图的 FROM 子句中不能使用子查询
以下情形中的视图是不可更新的:
包含以下关键字的 SQL 语句:聚合函数 (SUM 、 MIN、 MAX 、 COUNT 等 ) 、DISTINCT 、 GROUP BY、 HAVING 、 UNION 或 UNION ALL;常量视图;JOIN;FROM 一个不能更新的视图;WHERE 子句的子查询引用了 FROM 子句中的表;使用了临时表,视图是不可更新
1.3 视图的基本使用
创建视图完全格式:
create [or replace][algorithm= {UNDEFINED | MERGE | TEMPTABLE}][definer= { user | CURRENT_USER }] [sql security { DEFINER | INVOKER }] view view_name [(column_list)] as select_statement [with [CASCADED | LOCAL] check option]
创建视图
create view 视图名称 as SQL 查询;
create view 视图名称 (字段名列表) as SQL 查询;
mysql> create view t11 as select * from t1;
注意:在视图表中不定义字段名的话,默认使用表中的字段名,若定义字段名的话,视图表中的字段名个数必须和基本中的字段个数相等。
查看视图
show table status; //查看当前库下所有表的状态信息
mysql> show table status where comment=“view”\G;
show create view 视图名; //查看创建视图的具体命令
mysql> show create view t11\G;
使用视图
select 字段名列表 from 视图名 where 条件; //查询记录
Insert into 视图名 ( 字段名列表 ) values( 字段值列表); //插入记录
update 视图名 set 字段名 = 值 where 条件; //更新记录
delete from 视图名 where 条件; //删除记录
注意:对视图内容操作即是对基本表操作,反之亦然!!!
删除视图
drop view 视图名;
mysql> drop view t11;
1.4 AS定义视图中字段名称
视图中的字段名不可以重复 所以要定义别名, 关联查询建的视图 默认不允许修改视图字段的值
create view 视图名 as select 表别名.源字段名 as 字段别名 from 源表名 表别名 left join 源表名 表别名 on 条件;
create view v2 as select a.name as aname , b.name as bname , a.uid as auid , b.uid as buid from user a left join info b on a.uid=b.uid; //user表别名a info表别名b
1.5 OR REPLACEX选项的使用
create or replace view 视图名 as select 查询; //创建时,若视图已存在,会替换已有的视图
ALGORITHM
定义处理视图的方式:ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}
MERAGE (替换方式):视图名直接使用视图的公式替换掉,把视图公式合并到了 select 中。不单独执行创建视图中的select语句 (默认)
TEMPTABLE (具体化方式):先得到视图的执行结果,该结果形成一个中间结果暂时存在内存中,之后,外面的 select 语句就调用了这些中间结果。
UNDEFINED (未定义) :ALGORITHM 选项的值是 UNDEFINED 表示使用的是 MERAGE 替换方式。
WITH CHECK OPTION:作用时定义对视图表里的数据做操作时的限制方式
当视图是根据另一个视图定义时 , 对视图更新 / 删除 / 插入
LOCAL 和 CASCADED 关键字决定了检查的范围。 LOCAL 仅检查当前视图的限制。 CASCADED 同时要满足基表的限制( 默认值 )。
mysql> create view v1 as select * from a where uid < 10 with check option;
create view v2 as select * from v1 where uid >=5 with local check option; //超出基表限制后,修改成功,原始表存在,基表、本表消失;

二十一、MySQL视图

上一篇:MySQL经典练习题(四)


下一篇:1 oracle的数据库管理