视图
<code>视图</code>是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。——百度百科 关系型数据库中的数据是由一张一张的二维关系表所组成,简单的单表查询只需要遍历一个表,而复杂的多表查询需要将多个表连接起来进行查询任务。对于复杂的查询事件,每次查询都需要编写MySQL代码效率低下。为了解决这个问题,数据库提供了视图(view)功能。 <code>视图是虚拟表,本身不存储数据,而是按照指定的方式进行查询。</code>
操作指令
代码
创建视图
<code>CREATE VIEW 视图名(列1,列2...) AS SELECT (列1,列2...) FROM ...;</code>
使用视图
<code>当成表使用就好</code>
修改视图
<code>CREATE OR REPLACE VIEW 视图名 AS SELECT [...] FROM [...];</code>
查看数据库已有视图
<code>>SHOW TABLES [like...];</code>(可以使用模糊查找)
查看视图详情
<code>DESC 视图名</code>或者<code>SHOW FIELDS FROM 视图名</code>
视图条件限制
<code>[WITH CHECK OPTION]</code>
删除视图
<code>DROP VIEW [IF EXISTS] 视图名1</code>
创建视图: <code>CREATE VIEW 视图名 AS</code> ;

?>总结: 使用视图和使用表完全一样,只需要把视图当成一张表就OK了。视图是一张虚拟表。
修改和创建视图可以使用代码 : <code>CREATE OR REPLACE VIEW 视图名 AS SELECT [...] FROM [...]</code> ;
?>总结: 通过<code>show tables;</code>反馈得到所有的表和视图。同样的,我们可以通过模糊检索的方式专门查看视图,这个时候,视图的命令统一采用v视图名v视图名的优势就体现出来了。
将表 v_job 中的数据进行更新,在通过视图检索:
?>总结:<code>视图不是表,不保存数据,只是一张虚拟表;</code>
?>如果在创建视图的时候制定了“WITH CHECK OPTION”,那么更新数据时不能插入或更新不符合视图限制条件的记录。
<code>作用:</code>对视图所做的DML操作的结果,不能违反视图的WHERE条件的限制。
?>总结:因为违反了视图中的<code>where author_id = 1</code>子句,所以抛出异常; 利用<code>with check option</code>约束限制,保证更新视图是在该视图的权限范围之内。 使用<code>WITH CHECK OPTION</code>约束时,(不指定选项则默认是CASCADED) 可以使用CASCADED或者LOCAL选项指定检查的程度: <code>CASCADED</code>:检查所有的视图,会检查嵌套视图及其底层的视图 <code>LOCAL</code>:只检查将要更新的视图本身,嵌套视图不检查其底层的视图
删除视图是指删除数据库中已存在的视图,删除视图时,只能删除视图的定义,不会删除数据,也就是说不会影响基表