精华内容
下载资源
问答
  • 视图的概念   视图是基于一张表或多张表或另外一个视图的逻辑表。视图不同于表,视图本身不包含任何数据。表是实际独立存在的实体,是用于...* 可以提高数据访问的安全性,通过视图往往只可以访问数据库表的特定部
    视图的概念 
      视图是基于一张表或多张表或另外一个视图的逻辑表。视图不同于表,视图本身不包含任何数据。表是实际独立存在的实体,是用于存储数据的基本结构。而视图只是一种定义,对应一个查询语句。视图的数据都来自于某些表,这些表被称为基表。通过视图来查看表,就像是从不同的角度来观察一个(或多个)表。 
    视图有如下一些优点: 
    * 可以提高数据访问的安全性,通过视图往往只可以访问数据库中表的特定部分,限制了用户访问表的全部行和列。 
    * 简化了对数据的查询,隐藏了查询的复杂性。视图的数据来自一个复杂的查询,用户对视图的检索却很简单。 
    * 一个视图可以检索多张表的数据,因此用户通过访问一个视图,可完成对多个表的访问。 
    * 视图是相同数据的不同表示,通过为不同的用户创建同一个表的不同视图,使用户可分别访问同一个表的不同部分。 
    视图可以在表能够使用的任何地方使用,但在对视图的操作上同表相比有些限制,特别是插入和修改操作。对视图的操作将传递到基表,所以在表上定义的约束条件和触发器在视图上将同样起作用。 

    视图的创建 
    创建视图需要CREAE VIEW系统权限,视图的创建语法如下: 
    CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW 视图名[(别名1[,别名2...])] 
    AS 子查询 
    [WITH CHECK OPTION [CONSTRAINT 约束名]] 
    [WITH READ ONLY] 
    其中: 
    OR REPLACE 表示替代已经存在的视图。 
    FORCE表示不管基表是否存在,创建视图。 
    NOFORCE表示只有基表存在时,才创建视图,是默认值。 
    别名是为子查询中选中的列新定义的名字,替代查询表中原有的列名。 
    子查询是一个用于定义视图的SELECT查询语句,可以包含连接、分组及子查询。 
    WITH CHECK OPTION表示进行视图插入或修改时必须满足子查询的约束条件。后面的约束名是该约束条件的名字。 
    WITH READ ONLY 表示视图是只读的。 
    删除视图的语法如下: 
    DROP VIEW 视图名; 
    删除视图者需要是视图的建立者或者拥有DROP ANY VIEW权限。视图的删除不影响基表,不会丢失数据。 
    1.创建简单视图  
    创建图书作者视图。 
    步骤1:创建图书作者视图: 
    Sql代码  收藏代码
    1. CREATE VIEW 图书作者(书名,作者)   
    2.         AS SELECT 图书名称,作者 FROM 图书;  

    输出结果: 
    视图已建立。 
    步骤2:查询视图全部内容 
    Sql代码  收藏代码
    1. SELECT * FROM 图书作者;  

    输出结果: 
    Sql代码  收藏代码
    1. 书名                           作者  
    2.         -------------------------------- --------------------  
    3.         计算机原理                     刘勇  
    4.          C语言程序设计                马丽  
    5.         汇编语言程序设计               黄海明  

    步骤3:查询部分视图: 
    Sql代码  收藏代码
    1. SELECT 作者 FROM 图书作者;  

    输出结果: 
    Sql代码  收藏代码
    1. 作者  
    2.         ----------  
    3.         刘勇  
    4.         马丽  
    5.         黄海明  

    说明:本训练创建的视图名称为“图书作者”,视图只包含两列,为“书名”和“作者”,对应图书表的“图书名称”和“作者”两列。如果省略了视图名称后面的列名,则视图会采用和表一样的列名。对视图查询和对表查询一样,但通过视图最多只能看到表的两列,可见视图隐藏了表的部分内容。 
    创建清华大学出版社的图书视图。 
    步骤1:创建清华大学出版社的图书视图: 
    Sql代码  收藏代码
    1. CREATE VIEW 清华图书   

    AS SELECT 图书名称,作者,单价 FROM 图书 WHERE 出版社编号= '01'; 
    执行结果: 
    视图已建立。 
    步骤2:查询图书视图: 
    Sql代码  收藏代码
    1. SELECT * FROM 清华图书;  

    执行结果: 
    Sql代码  收藏代码
    1. 图书名称                       作者             单价  
    2. -------------------------------------------- ---------- -----------------------  
    3.         计算机原理                     刘勇             25.3  

    步骤3:删除视图: 
    Sql代码  收藏代码
    1. DROP VIEW 清华图书;  

    执行结果: 
    视图已丢掉。  
    说明:该视图包含了对记录的约束条件。 
    2.创建复杂视图 
    修改作者视图,加入出版社名称。 
    步骤1:重建图书作者视图: 
    Sql代码  收藏代码
    1. CREATE OR REPLACE VIEW 图书作者(书名,作者,出版社)   
    2.         AS SELECT 图书名称,作者,出版社名称 FROM 图书,出版社   
    3.         WHERE 图书.出版社编号=出版社.编号;  

    输出结果: 
    视图已建立。 
    步骤2:查询新视图内容: 
    Sql代码  收藏代码
    1. SELECT * FROM 图书作者;  

    输出结果: 
    Sql代码  收藏代码
    1. 书名                           作者       出版社  
    2.         -------------------------------------------- ---------- ----------------------------  
    3.         计算机原理               刘勇       清华大学出版社  
    4.         C语言程序设计         马丽       电子科技大学出版社  
    5.         汇编语言程序设计     黄海明     电子科技大学出版社  

    说明:本训练中,使用了OR REPLACE选项,使新的视图替代了同名的原有视图,同时在查询中使用了相等连接,使得视图的列来自于两个不同的基表。 
    创建一个统计视图。 
    步骤1:创建emp表的一个统计视图: 
    Sql代码  收藏代码
    1. CREATE VIEW 统计表(部门名,最大工资,最小工资,平均工资)  
    2.         AS SELECT DNAME,MAX(SAL),MIN(SAL),AVG(SAL) FROM EMP E,DEPT D  
    3.         WHERE E.DEPTNO=D.DEPTNO GROUP BY DNAME;  

    执行结果: 
    视图已建立。 
    步骤2:查询统计表: 
    Sql代码  收藏代码
    1. SELECT * FROM 统计表;  

    执行结果: 
    Sql代码  收藏代码
    1. 部门名       最大工资    最小工资    平均工资  
    2.         -------------------------- --------------- ----------------- ------------------  
    3.         ACCOUNTING          5000       1300        3050  
    4.         RESEARCH             3000        800        2175  
    5.         SALES                  2850        950   1566.66667  

    说明:本训练中,使用了分组查询和连接查询作为视图的子查询,每次查询该视图都可以得到统计结果。 
    创建只读视图 
    创建只读视图要用WITH READ ONLY选项。 
    创建只读视图。 
    步骤1:创建emp表的经理视图: 
    Sql代码  收藏代码
    1. CREATE OR REPLACE VIEW manager   
    2.         AS SELECT * FROM emp WHERE job= 'MANAGER'  
    3.         WITH READ ONLY;  

    执行结果: 
    视图已建立。 
    步骤2:进行删除: 
    Sql代码  收藏代码
    1. DELETE FROM manager;  

    执行结果: 
    ERROR 位于第 1 行: 
    ORA-01752: 不能从没有一个键值保存表的视图中删除 
    4.创建基表不存在的视图 
    正常情况下,不能创建错误的视图,特别是当基表还不存在时。但使用FORCE选项就可以在创建基表前先创建视图。创建的视图是无效视图,当访问无效视图时,Oracle将重新编译无效的视图。 
    使用FORCE选项创建带有错误的视图: 
    Sql代码  收藏代码
    1. CREATE FORCE VIEW 班干部 AS SELECT * FROM 班级 WHERE 职务 IS NOT NULL;  

    执行结果: 
    警告: 创建的视图带有编译错误。 
    视图的操作 
    对视图经常进行的操作是查询操作,但也可以在一定条件下对视图进行插入、删除和修改操作。对视图的这些操作最终传递到基表。但是对视图的操作有很多限定。如果视图设置了只读,则对视图只能进行查询,不能进行修改操作。 
    1.视图的插入  
    视图插入练习。 
    步骤1:创建清华大学出版社的图书视图: 
    Sql代码  收藏代码
    1. CREATE OR REPLACE VIEW 清华图书   
    2.         AS SELECT * FROM 图书 WHERE 出版社编号= '01';  

    执行结果: 
    视图已建立。 
    步骤2:插入新图书: 
    Sql代码  收藏代码
    1. INSERT INTO 清华图书 VALUES('A0005','软件工程','01','冯娟',5,27.3);  

    执行结果: 
    已创建 1 行。 
    步骤3:显示视图: 
    Sql代码  收藏代码
    1. SELECT * FROM 清华图书;  

    执行结果: 
    Sql代码  收藏代码
    1. 图书  图书名称                       出 作者             数量       单价  
    2.         -------- ---------------------------------------- ----------- -------- ------------------------ --------------  
    3.         A0001 计算机原理                     01 刘勇                5       25.3  
    4. A0005 软件工程                       01 冯娟                5       27.3  

    步骤4:显示基表 
    Sql代码  收藏代码
    1. SELECT * FROM 图书;  

    执行结果: 
    Sql代码  收藏代码
    1. 图书  图书名称         出 作者       数量       单价  
    2.         -------- ------------------------------------------ ------- ---------------- ----------------- ---------------  
    3.         A0001 计算机原理           01 刘勇        5        25.3  
    4.         A0002  C语言程序设计        02 马丽    1       18.75  
    5.         A0003 汇编语言程序设计     02 黄海明       15       20.18  
    6.         A0005 软件工程              01 冯娟        5        27.3  

    说明:通过查看视图,可见新图书插入到了视图中。通过查看基表,看到该图书也出现在基表中,说明成功地进行了插入。新图书的出版社编号为“01”,仍然属于“清华大学出版社”。 
    但是有一个问题,就是如果在“清华图书”的视图中插入其他出版社的图书,结果会怎么样呢?结果是允许插入,但是在视图中看不见,在基表中可以看见,这显然是不合理的。 
    2.使用WITH CHECK OPTION选项 
    为了避免上述情况的发生,可以使用WITH CHECK OPTION选项。使用该选项,可以对视图的插入或更新进行限制,即该数据必须满足视图定义中的子查询中的WHERE条件,否则不允许插入或更新。比如“清华图书”视图的WHERE条件是出版社编号要等于“01”(01是清华大学出版社的编号),所以如果设置了WITH CHECK OPTION选项,那么只有出版社编号为“01”的图书才能通过清华视图进行插入。 
    使用WITH CHECK OPTION选项限制视图的插入。 
    步骤1:重建清华大学出版社的图书视图,带WITH CHECK OPTION选项: 
    Sql代码  收藏代码
    1. CREATE OR REPLACE VIEW 清华图书   
    2.         AS SELECT * FROM 图书 WHERE 出版社编号= '01'  
    3.         WITH CHECK OPTION;  

    执行结果: 
    视图已建立。 
    步骤2:插入新图书: 
    Sql代码  收藏代码
    1. INSERT INTO 清华图书 VALUES('A0006','Oracle数据库','02','黄河',3,39.8);  

    执行结果: 
    ERROR 位于第 1 行: 
    ORA-01402: 视图 WITH CHECK OPTIDN 违反 where 子句 
    说明:可见通过设置了WITH CHECK OPTION选项,“02”出版社的图书插入受到了限制。如果修改已有图书的出版社编号情况会如何?答案是将同样受到限制。要是删除视图中已有图书,结果又将怎样呢?答案是可以,因为删除并不违反WHERE条件。 
    3.来自基表的限制 
    除了以上的限制,基表本身的限制和约束也必须要考虑。如果生成子查询的语句是一个分组查询,或查询中出现计算列,这时显然不能对表进行插入。另外,主键和NOT NULL列如果没有出现在视图的子查询中,也不能对视图进行插入。在视图中插入的数据,也必须满足基表的约束条件。 
    基表本身限制视图的插入。 
    步骤1:重建图书价格视图: 
    Sql代码  收藏代码
    1. CREATE OR REPLACE VIEW 图书价格   
    2.         AS SELECT 图书名称,单价 FROM 图书;  

    执行结果: 
    视图已建立。 
    步骤2:插入新图书: 
    Sql代码  收藏代码
    1. INSERT INTO 图书价格 VALUES('Oracle数据库',39.8);  

    执行结果: 
    ERROR 位于第 1 行: 
    ORA-01400: 无法将 NULL 插入 ("SCOTT"."图书"."图书编号") 
    说明:在视图中没有出现的基表的列,在对视图插入时,自动默认为NULL。该视图只有两列可以插入,其他列将默认为空。插入出错的原因是,在视图中不能插入图书编号,而图书编号是图书表的主键,是必须插入的列,不能为空,这就产生了矛盾。 
    视图的查看 
    USER_VIEWS字典中包含了视图的定义。 
    USER_UPDATABLE_COLUMNS字典包含了哪些列可以更新、插入、删除。 
    USER_OBJECTS字典中包含了用户的对象。 
    可以通过DESCRIBE命令查看字典的其他列信息。在这里给出一个训练例子。 
    查看清华图书视图的定义: 
    Sql代码  收藏代码
    1. SELECT TEXT FROM USER_VIEWS WHERE VIEW_NAME='清华图书';  

    执行结果: 
    Sql代码  收藏代码
    1. TEXT  
    2.         -----------------------------------------------------------------------------------------------  
    3.         SELECT 图书名称,作者,单价 FROM 图书 WHERE 出版社编号='01'   

    查看用户拥有的视图: 
    Sql代码  收藏代码
    1. SELECT object_name FROM user_objects WHERE object_type='VIEW';  

    执行结果: 
    Sql代码  收藏代码
    1. OBJECT_NAME  
    2.         ----------------------------------------------------------------------------------------------  
    3.         清华图书  
    4.         图书作者  


    黑色头发:http://heisetoufa.iteye.com/
    展开全文
  • 视图的概念  视图是基于一张表或多张表或另外一个视图的逻辑表。视图不同于表,视图本身不包含任何数据。表是实际独立存在的实体,是...* 可以提高数据访问的安全性,通过视图往往只可以访问数据库表的特定部分,限
    视图的概念
      视图是基于一张表或多张表或另外一个视图的逻辑表。视图不同于表,视图本身不包含任何数据。表是实际独立存在的实体,是用于存储数据的基本结构。而视图只是一种定义,对应一个查询语句。视图的数据都来自于某些表,这些表被称为基表。通过视图来查看表,就像是从不同的角度来观察一个(或多个)表。
    视图有如下一些优点:
    * 可以提高数据访问的安全性,通过视图往往只可以访问数据库中表的特定部分,限制了用户访问表的全部行和列。
    * 简化了对数据的查询,隐藏了查询的复杂性。视图的数据来自一个复杂的查询,用户对视图的检索却很简单。
    * 一个视图可以检索多张表的数据,因此用户通过访问一个视图,可完成对多个表的访问。
    * 视图是相同数据的不同表示,通过为不同的用户创建同一个表的不同视图,使用户可分别访问同一个表的不同部分。
    视图可以在表能够使用的任何地方使用,但在对视图的操作上同表相比有些限制,特别是插入和修改操作。对视图的操作将传递到基表,所以在表上定义的约束条件和触发器在视图上将同样起作用。

    视图的创建
    创建视图需要CREAE VIEW系统权限,视图的创建语法如下:
    CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW 视图名[(别名1[,别名2...])]
    AS 子查询
    [WITH CHECK OPTION [CONSTRAINT 约束名]]
    [WITH READ ONLY]
    其中:
    OR REPLACE 表示替代已经存在的视图。
    FORCE表示不管基表是否存在,创建视图。
    NOFORCE表示只有基表存在时,才创建视图,是默认值。
    别名是为子查询中选中的列新定义的名字,替代查询表中原有的列名。
    子查询是一个用于定义视图的SELECT查询语句,可以包含连接、分组及子查询。
    WITH CHECK OPTION表示进行视图插入或修改时必须满足子查询的约束条件。后面的约束名是该约束条件的名字。
    WITH READ ONLY 表示视图是只读的。
    删除视图的语法如下:
    DROP VIEW 视图名;
    删除视图者需要是视图的建立者或者拥有DROP ANY VIEW权限。视图的删除不影响基表,不会丢失数据。
    1.创建简单视图 
    创建图书作者视图。
    步骤1:创建图书作者视图:
    Sql代码  收藏代码
    1. CREATE VIEW 图书作者(书名,作者)   
    2.         AS SELECT 图书名称,作者 FROM 图书;  

    输出结果:
    视图已建立。
    步骤2:查询视图全部内容
    Sql代码  收藏代码
    1. SELECT * FROM 图书作者;  

    输出结果:
    Sql代码  收藏代码
    1. 书名                           作者  
    2.         -------------------------------- --------------------  
    3.         计算机原理                     刘勇  
    4.          C语言程序设计                马丽  
    5.         汇编语言程序设计               黄海明  

    步骤3:查询部分视图:
    Sql代码  收藏代码
    1. SELECT 作者 FROM 图书作者;  

    输出结果:
    Sql代码  收藏代码
    1. 作者  
    2.         ----------  
    3.         刘勇  
    4.         马丽  
    5.         黄海明  

    说明:本训练创建的视图名称为“图书作者”,视图只包含两列,为“书名”和“作者”,对应图书表的“图书名称”和“作者”两列。如果省略了视图名称后面的列名,则视图会采用和表一样的列名。对视图查询和对表查询一样,但通过视图最多只能看到表的两列,可见视图隐藏了表的部分内容。
    创建清华大学出版社的图书视图。
    步骤1:创建清华大学出版社的图书视图:
    Sql代码  收藏代码
    1. CREATE VIEW 清华图书   

    AS SELECT 图书名称,作者,单价 FROM 图书 WHERE 出版社编号= '01';
    执行结果:
    视图已建立。
    步骤2:查询图书视图:
    Sql代码  收藏代码
    1. SELECT * FROM 清华图书;  

    执行结果:
    Sql代码  收藏代码
    1. 图书名称                       作者             单价  
    2. -------------------------------------------- ---------- -----------------------  
    3.         计算机原理                     刘勇             25.3  

    步骤3:删除视图:
    Sql代码  收藏代码
    1. DROP VIEW 清华图书;  

    执行结果:
    视图已丢掉。 
    说明:该视图包含了对记录的约束条件。
    2.创建复杂视图
    修改作者视图,加入出版社名称。
    步骤1:重建图书作者视图:
    Sql代码  收藏代码
    1. CREATE OR REPLACE VIEW 图书作者(书名,作者,出版社)   
    2.         AS SELECT 图书名称,作者,出版社名称 FROM 图书,出版社   
    3.         WHERE 图书.出版社编号=出版社.编号;  

    输出结果:
    视图已建立。
    步骤2:查询新视图内容:
    Sql代码  收藏代码
    1. SELECT * FROM 图书作者;  

    输出结果:
    Sql代码  收藏代码
    1. 书名                           作者       出版社  
    2.         -------------------------------------------- ---------- ----------------------------  
    3.         计算机原理               刘勇       清华大学出版社  
    4.         C语言程序设计         马丽       电子科技大学出版社  
    5.         汇编语言程序设计     黄海明     电子科技大学出版社  

    说明:本训练中,使用了OR REPLACE选项,使新的视图替代了同名的原有视图,同时在查询中使用了相等连接,使得视图的列来自于两个不同的基表。
    创建一个统计视图。
    步骤1:创建emp表的一个统计视图:
    Sql代码  收藏代码
    1. CREATE VIEW 统计表(部门名,最大工资,最小工资,平均工资)  
    2.         AS SELECT DNAME,MAX(SAL),MIN(SAL),AVG(SAL) FROM EMP E,DEPT D  
    3.         WHERE E.DEPTNO=D.DEPTNO GROUP BY DNAME;  

    执行结果:
    视图已建立。
    步骤2:查询统计表:
    Sql代码  收藏代码
    1. SELECT * FROM 统计表;  

    执行结果:
    Sql代码  收藏代码
    1. 部门名       最大工资    最小工资    平均工资  
    2.         -------------------------- --------------- ----------------- ------------------  
    3.         ACCOUNTING          5000       1300        3050  
    4.         RESEARCH             3000        800        2175  
    5.         SALES                  2850        950   1566.66667  

    说明:本训练中,使用了分组查询和连接查询作为视图的子查询,每次查询该视图都可以得到统计结果。
    创建只读视图
    创建只读视图要用WITH READ ONLY选项。
    创建只读视图。
    步骤1:创建emp表的经理视图:
    Sql代码  收藏代码
    1. CREATE OR REPLACE VIEW manager   
    2.         AS SELECT * FROM emp WHERE job= 'MANAGER'  
    3.         WITH READ ONLY;  

    执行结果:
    视图已建立。
    步骤2:进行删除:
    Sql代码  收藏代码
    1. DELETE FROM manager;  

    执行结果:
    ERROR 位于第 1 行:
    ORA-01752: 不能从没有一个键值保存表的视图中删除
    4.创建基表不存在的视图
    正常情况下,不能创建错误的视图,特别是当基表还不存在时。但使用FORCE选项就可以在创建基表前先创建视图。创建的视图是无效视图,当访问无效视图时,Oracle将重新编译无效的视图。
    使用FORCE选项创建带有错误的视图:
    Sql代码  收藏代码
    1. CREATE FORCE VIEW 班干部 AS SELECT * FROM 班级 WHERE 职务 IS NOT NULL;  

    执行结果:
    警告: 创建的视图带有编译错误。
    视图的操作
    对视图经常进行的操作是查询操作,但也可以在一定条件下对视图进行插入、删除和修改操作。对视图的这些操作最终传递到基表。但是对视图的操作有很多限定。如果视图设置了只读,则对视图只能进行查询,不能进行修改操作。
    1.视图的插入 
    视图插入练习。
    步骤1:创建清华大学出版社的图书视图:
    Sql代码  收藏代码
    1. CREATE OR REPLACE VIEW 清华图书   
    2.         AS SELECT * FROM 图书 WHERE 出版社编号= '01';  

    执行结果:
    视图已建立。
    步骤2:插入新图书:
    Sql代码  收藏代码
    1. INSERT INTO 清华图书 VALUES('A0005','软件工程','01','冯娟',5,27.3);  

    执行结果:
    已创建 1 行。
    步骤3:显示视图:
    Sql代码  收藏代码
    1. SELECT * FROM 清华图书;  

    执行结果:
    Sql代码  收藏代码
    1. 图书  图书名称                       出 作者             数量       单价  
    2.         -------- ---------------------------------------- ----------- -------- ------------------------ --------------  
    3.         A0001 计算机原理                     01 刘勇                5       25.3  
    4. A0005 软件工程                       01 冯娟                5       27.3  

    步骤4:显示基表
    Sql代码  收藏代码
    1. SELECT * FROM 图书;  

    执行结果:
    Sql代码  收藏代码
    1. 图书  图书名称         出 作者       数量       单价  
    2.         -------- ------------------------------------------ ------- ---------------- ----------------- ---------------  
    3.         A0001 计算机原理           01 刘勇        5        25.3  
    4.         A0002  C语言程序设计        02 马丽    1       18.75  
    5.         A0003 汇编语言程序设计     02 黄海明       15       20.18  
    6.         A0005 软件工程              01 冯娟        5        27.3  

    说明:通过查看视图,可见新图书插入到了视图中。通过查看基表,看到该图书也出现在基表中,说明成功地进行了插入。新图书的出版社编号为“01”,仍然属于“清华大学出版社”。
    但是有一个问题,就是如果在“清华图书”的视图中插入其他出版社的图书,结果会怎么样呢?结果是允许插入,但是在视图中看不见,在基表中可以看见,这显然是不合理的。
    2.使用WITH CHECK OPTION选项
    为了避免上述情况的发生,可以使用WITH CHECK OPTION选项。使用该选项,可以对视图的插入或更新进行限制,即该数据必须满足视图定义中的子查询中的WHERE条件,否则不允许插入或更新。比如“清华图书”视图的WHERE条件是出版社编号要等于“01”(01是清华大学出版社的编号),所以如果设置了WITH CHECK OPTION选项,那么只有出版社编号为“01”的图书才能通过清华视图进行插入。
    使用WITH CHECK OPTION选项限制视图的插入。
    步骤1:重建清华大学出版社的图书视图,带WITH CHECK OPTION选项:
    Sql代码  收藏代码
    1. CREATE OR REPLACE VIEW 清华图书   
    2.         AS SELECT * FROM 图书 WHERE 出版社编号= '01'  
    3.         WITH CHECK OPTION;  

    执行结果:
    视图已建立。
    步骤2:插入新图书:
    Sql代码  收藏代码
    1. INSERT INTO 清华图书 VALUES('A0006','Oracle数据库','02','黄河',3,39.8);  

    执行结果:
    ERROR 位于第 1 行:
    ORA-01402: 视图 WITH CHECK OPTIDN 违反 where 子句
    说明:可见通过设置了WITH CHECK OPTION选项,“02”出版社的图书插入受到了限制。如果修改已有图书的出版社编号情况会如何?答案是将同样受到限制。要是删除视图中已有图书,结果又将怎样呢?答案是可以,因为删除并不违反WHERE条件。
    3.来自基表的限制
    除了以上的限制,基表本身的限制和约束也必须要考虑。如果生成子查询的语句是一个分组查询,或查询中出现计算列,这时显然不能对表进行插入。另外,主键和NOT NULL列如果没有出现在视图的子查询中,也不能对视图进行插入。在视图中插入的数据,也必须满足基表的约束条件。
    基表本身限制视图的插入。
    步骤1:重建图书价格视图:
    Sql代码  收藏代码
    1. CREATE OR REPLACE VIEW 图书价格   
    2.         AS SELECT 图书名称,单价 FROM 图书;  

    执行结果:
    视图已建立。
    步骤2:插入新图书:
    Sql代码  收藏代码
    1. INSERT INTO 图书价格 VALUES('Oracle数据库',39.8);  

    执行结果:
    ERROR 位于第 1 行:
    ORA-01400: 无法将 NULL 插入 ("SCOTT"."图书"."图书编号")
    说明:在视图中没有出现的基表的列,在对视图插入时,自动默认为NULL。该视图只有两列可以插入,其他列将默认为空。插入出错的原因是,在视图中不能插入图书编号,而图书编号是图书表的主键,是必须插入的列,不能为空,这就产生了矛盾。
    视图的查看
    USER_VIEWS字典中包含了视图的定义。
    USER_UPDATABLE_COLUMNS字典包含了哪些列可以更新、插入、删除。
    USER_OBJECTS字典中包含了用户的对象。
    可以通过DESCRIBE命令查看字典的其他列信息。在这里给出一个训练例子。
    查看清华图书视图的定义:
    Sql代码  收藏代码
    1. SELECT TEXT FROM USER_VIEWS WHERE VIEW_NAME='清华图书';  

    执行结果:
    Sql代码  收藏代码
    1. TEXT  
    2.         -----------------------------------------------------------------------------------------------  
    3.         SELECT 图书名称,作者,单价 FROM 图书 WHERE 出版社编号='01'   

    查看用户拥有的视图:
    Sql代码  收藏代码
    1. SELECT object_name FROM user_objects WHERE object_type='VIEW';  

    执行结果:
    Sql代码  收藏代码
    1. OBJECT_NAME  
    2.         ----------------------------------------------------------------------------------------------  
    3.         清华图书  
    4.         图书作者  


    黑色头发:http://heisetoufa.iteye.com/
    展开全文
  • MYSQL视图查询

    千次阅读 2019-03-26 13:48:17
    最近优化项目页面响应时间,发现一处sql查询结构简单却非常慢,点进去发现是从视图进行查询的,刚开始不知道为什么,后来查询才明白原因,记录一下。 视图定义有些时候方便很多,但是有些复杂情况定义就不适合。...

    本文转自http://wangyuanzju.blog.163.com/blog/static/130292007714102859807/

    最近在优化项目页面响应时间,发现一处sql查询结构简单却非常慢,点进去发现是从视图进行查询的,刚开始不知道为什么,后来查询才明白原因,记录一下。

    视图定义在有些时候方便很多,但是有些复杂情况定义就不适合。因为mysql先执行视图的查询,得到的结果是很大范围的,然后从中在进行条件筛选,所以导致效率会很差。
    以下内容为从博客复制。

    视图是MySQL 5.0中增加的三大新功能之一(另外两个是存储过程与触发器),也是一般稍微“高级”一点的数据库所必需要有的功能。MySQL在定义视图上没什么限制,基本上所有的查询都可定义为视图,并且也支持可更新视图(当然只有在视图和行列与基础表的行列之间存在一一对应关系时才能更新),因此从功能上说MySQL的视图功能已经很完善了。

    然而若要在应用中使用视图,还需要了解处理视图时的性能,而MySQL在这方面问题是比较大的,需要特别注意。首先要知道MySQL在处理视图时有两种算法,分别称为MERGE和TEMPTABLE。在执行"CREATE VIEW"语句时可以指定使用哪种算法。所谓MERGE是指在处理涉及到视图的操作时,将对视图的操作根据视图的定义进行展开,有点类似于C语言中的宏展开。比如设有以下的表(类似于博客中的评论):
    CREATE TABLE comment (
    id int(11) NOT NULL,
    user_id int(11) default NULL,
    content varchar(255) default NULL,
    PRIMARY KEY (id),
    KEY idx_comment_uid (user_id)
    ) ENGINE=InnoDB;
    假设user_id < 10000的用户为VIP用户,我们可以这样创建一个视图来表示VIP用户的评论:
    CREATE VIEW vip_comment AS SELECT * FROM comment WHERE user_id < 10000;
    这时我们在操作vip_comment视图时使用的就是MERGE算法。如:
    mysql > EXPLAIN EXTENDED SELECT count(*) FROM vip_comment WHERE user_id < 0;
    ±—±------------±--------±------±----------------±----------------±--------±-----±-----±-------------------------+
    | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
    ±—±------------±--------±------±----------------±----------------±--------±-----±-----±-------------------------+
    | 1 | SIMPLE | comment | range | idx_comment_uid | idx_comment_uid | 5 | NULL | 10 | Using where; Using index |
    ±—±------------±--------±------±----------------±----------------±--------±-----±-----±-------------------------+
    mysql> show warnings;
    ±------±-----±--------------------------------------------------------------------------------------------------------------------------------------+
    | Level | Code | Message |
    ±------±-----±--------------------------------------------------------------------------------------------------------------------------------------+
    | Note | 1003 | select count(0) AS count(*) from test.comment where ((test.comment.user_id < 0) and (test.comment.user_id < 10000)) |
    ±------±-----±--------------------------------------------------------------------------------------------------------------------------------------+
    可以看到,对vip_comment的操作已经被扩展为对comment表的操作。

    一般来说在能够使用MERGE算法的时候MySQL处理视图上没什么性能问题,但并非在任何时候都能使用MERGE算法。事实上,只要视图的定义稍稍有点复杂,MySQL就没办法使用MERGE算法了。准确的说,只要视图定义中使用了以下SQL构造块就无法使用MERGE算法:

    聚集函数
    DISTINCT
    GROUP BY
    HAVING
    集合操作(在MySQL中只有UNION, UNION ALL,没有EXCEPT和INTERSECT)
    子查询
    确实,在视图定义比较复杂的情况下,要对视图操作进行有效的优化是非常困难的。因此在这个时候,MySQL使用了一种以不变应万变的方法,即先执行视图定义,将其结果使用临时表保存起来,这样后续对视图的操作就转化为对临时表的操作。不能不说从单从软件设计的角度看,这样的方法非常的优雅,然而从性能角度,这一方法也是非常的差。

    比如我们希望使用如下的视图来表示每个用户的评论数,即:
    CREATE VIEW comment_count AS SELECT user_id, count() AS count FROM comment GROUP BY user_id;
    使用这个视图的时候,我们可能心里有个小算盘。目前我们先用这个视图顶着,如果性能确实有问题,那我们就再来搞一张comment_count的表,其中就记下来每个用户的评论数。而我们现在先用这个视图是为了将来要是改的话会方便点(这也是视图–即教科书中所谓的外模式–这个东西存在的主要原因之一,另一主要原因是便于权限控制)。但是遇到了MySQL这个蠢货,我们的算盘铁定会失败。
    我们来看一下指定user_id从comment_count选取记录时的执行策略:
    mysql> explain select count(
    ) from comment_count where user_id = 90;
    ±—±------------±-----------±------±--------------±----------------±--------±-----±-------±------------+
    | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
    ±—±------------±-----------±------±--------------±----------------±--------±-----±-------±------------+
    | 1 | PRIMARY | | ALL | NULL | NULL | NULL | NULL | 101 | Using where |
    | 2 | DERIVED | comment | index | NULL | idx_comment_uid | 5 | NULL | 524833 | Using index |
    ±—±------------±-----------±------±--------------±----------------±--------±-----±-------±------------+
    2 rows in set (4.18 sec)
    可以看出,MySQL首先是先执行comment_count的视图定义,将结果存储在临时表中(即DERIVED),然后再扫描这一临时表,选择出满足"user_id = 90"的那一条记录。这样,虽然我们最终只需要统计90号用户的评论数,并且comment表的user_id字段上也有索引,MySQL也会扫描整个comment表,并按user_id分组计算出所有用户的评论数。一般来说,这铁定会使你的系统玩完。这里面还要注意的是即使在进行EXPLAIN时,视图的物化也是要先执行的,因此若评论很多的话EXPLAIN也是一样的慢。
    这个问题的根源是MySQL的查询优化本来就存在很多问题。对于上述的查询,要达到比较好的优化效果在数据库中一般是如下处理的:
    1、将对视图的操作转化为FROM子句中的子查询:
    select * from (select user_id, count() as count from comment group by user_id) as comment_count where user_id = 90;
    2、子查询提升。因为子查询中使用了group by,因此先将外面的条件作为提升后的having条件
    select user_id, count(
    ) as count from comment group by user_id having user_id = 90;
    3、由于having条件中不涉及聚集函数,转化为where条件
    select user_id, count() as count from comment where user_id = 90 group by user_id;
    4、由于指定where条件后,user_id已经是一个常数,根据常数group by没意义,因此去掉group by
    select user_id, count(
    ) as count from comment where user_id = 90;
    一般从概念上要经过这四步转化,才能得到最后的优化语句。除第4步无法根据EXPLAIN输出和查询性能判断出MySQL是否进行这一优化外,前3类优化MySQL都不会进行。因此,MySQL要能够有效的处理上述查询还有很长的路要走。

    PS: 相对来说PostgreSQL的查询优化能力就强得多,上面的查询在PostgreSQL中就能够产生上述优化后的最终执行计划。PostgreSQL比较关注查询优化估计与PostgreSQL的学院派风格或PostgreSQL中的rule system有关。

    展开全文
  • 文章目录1 视图概述、创建视图1.1 基本概念1.2 创建视图(1)单表中创建视图(2)多表中创建视图(3)在视图中创建视图2 查看视图、修改视图2.1 查看视图2.2 修改视图3 视图数据更新、删除3.1 视图数据更新3.2...

    1 视图概述、创建视图

    1.1 基本概念

    视图是一个虚拟表,是 sql 的查询结果,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据,在使用视图时动态生成。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。

    在这里插入图片描述

    1.2 创建视图

    使用 create view 语句创建视图语法为:

    create [or replace]								# 可替换已有的视图
    [algorithm ={ undefined|merge|temptable }]		# 视图算法的选择
    view view_name[(column_list)]					# 视图名,后可自定义视图列表名
    as select_statement								# 视图的定义
    [with[ cascaded|local] check option ] ;			# 权限设置
    

    说明:
    create: 表示创建新的视图;
    or replace:表示如果该视图已经存在,则用新视图代替它,若视图不存在则创建新视图

    algorithm 子句:表示为视图选择算法,有三个选项,一般情况下我们不显示给出,使用第一个参数 “undefined”,表示 MySQL 自动选择算法;

    view_name:为视图名。默认情况下,在当前数据库下创建视图,若想给其他数据创建视图,必须在视图名前制定目标数据库,db_name.view_name,视图名不能与表名相同;

    column_list:可以给视图列取名称,多个列用逗号隔开;

    select_statement:用来创建视图的 select 语句,给出了视图所需内容。默认情况下,select 语句检索的列名就是视图的列名称。若想给列名取别的名字,可使用 column_list 字句,但注意两者数目必须相等。

    With check option :用于视图更新时,保证在视图的权限范围内;

    • 要求具有针对视图的 create view 语句权限,以及针对有 select 语句选择列上的某些权限。
      cascaded | local:可选参数;

    • lcascade:默认值,更新视图时要满足所有相关视图和表的条件;

    • local :表示更新视图时满足该视图本身的定义即可。

    视图不仅可以从一个基表导出,还可以从多张基表导出来;并且还可以在已有的视图基础上导出新的视图;因此可以将视图的创建分为三种情况:单表中创建视图,在多表中创建视图,在已有视图中创建新的视图

    (1)在单表中创建视图

    【例】在 course 数据库中,基于 student 表创建一个 A 老师可以查看的视图 A,取名:stu_viewA,要求查询输出 student_id,student_name,phone,并将字段名改为:学号、姓名、电话。

    create or replace
    view stu_viewA(学号, 姓名, 电话)
    as
    select student_id, student_name, phone
    from student;
    

    【例】在 course 数据库中,基于 student 表创建一个 B 老师可以查看的视图 B,取名:stu_viewB,要求查询输出家庭地址为“上海”的学生详细信息。

    create or replace
    view stu_viewB
    as
    select * from student where home_address = N'上海' # 中文查不出来,前面N
    with check option;
    

    (2)在多表中创建视图

    【例】在 course 数据库中,使用 teacher 表、department 表创建一个名为 tech_view1 的视图,视图中可查询教工号 Teacher_id、教师姓名 Teacher_name、性别 Gender、学院名称 Department_name、专业 Major、职称信息 profesional。

    create view tech_view1
    as
    select Teacher_id, Teacher_name, Gender, Department_name, Major, profesional
    from teacher join department
    on teacher.Department_id= department. Department_id;
    

    (3)在视图中创建新视图

    【例】利用上例中的 tech_view1 视图,创建一个名为 tech_view2 新视图,要求统计出“信息学院”,职称为“教授”、“副教授”的教师的以下信息:Teacher_id,Teacher_name,Major,并将视图的字段名设成教工号、姓名和专业。

    create view tech_view2(教工号, 姓名, 专业)
    as
    select Teacher_id, Teacher_Name, Major
    from tech_view1
    where profesional like N'%教授' and Department_name = N'信息学院';
    

    备注:
    查询条件是中文查不出来时,查询时加入 N,如:select * form table where city=N’上海’

    总结:

    • 视图是从一个或者多个表、或其他视图中通过 select 语句导出的虚拟表;
    • 数据库中只存放了视图的定义,而并没有存放视图中的数据;
    • 浏览视图时产生的数据均来自定义视图查询所引用的基表,并且在引用视图时动态生成;
    • 通过视图可以实现对基表数据的查询或修改。

    视图作用:

    • 简化数据查询和处理:视图可以为用户集中多个表中的数据,使用户可以将注意力集中在他们关心的数据上,简化用户对数据的查询和处理;
    • 屏蔽数据库的复杂性:数据库表的更改不影响用户对数据库的使用,用户也不必了解复杂的数据库中的表结构。例如,那些定义了若干张表连接的视图,就将表与表之间的连接操作对用户隐蔽起来了;
    • 安全性:如果想要使用户只能查询或修改用户有权限访问的数据,也可以只授予用户访问视图的权限,而不授予访问表的权限,这样就提高了数据库的安全性。

    2 查看视图、修改视图

    2.1 查看视图

    查看视图:查看数据库中已存在的视图的定义。可以查看视图的基本信息、详细信息;
    1、查看视图基本信息的方法:describe 语句、show table status 语句;
    2、查看视图详细信息的方法:show create view 语句、查询 information_schema 数据库下的 views 表等。

    查看视图基本信息
    (1)使用 describe 语句查询视图基本信息
    describe 语句查看视图与查看表的形式一样,
    语法:describe view_name;describe 可简写成 desc

    (2)使用 show table status 语句查询视图基本信息:
    语法:show table status like ‘view_name’;

    example:

    # 使用 describe 语句查询上例中建立的 tech_view2 视图的基本信息
    describe tech_view2;
    
    # 使用 show table status 语句查询 tech_view2 视图的基本信息
    show table status like ‘tech_view2’;
    

    查看视图详细信息
    (1)使用 show create view 语句查询视图详细信息:
    语法:show create view view_name;

    (2)在 views 表中查看视图详细信息:MySQL 数据库中,所有视图的定义都存在 information_schema 数据库下的 views 表中。
    即:查询 information_schema.views 表,可以查看到数据库中所有视图的详细信息。
    代码如下:
    select * from information_schema.views;

    example:

    # 使用show create view语句查询tech_view2视图的详细信息
    show create view tech_view2;
    
    select * from information_schema.views;
    

    2.2 修改视图

    修改视图:指修改数据库中已存在的表的定义。当基本表的某些字段发生改变时,可以通过修改视图来保持视图和基本表之间一致。MySQL 中通过 create or replace view 语句和 alter 语句来修改视图。

    (1)使用 create or replace view 语句来修改视图,与前面创建视图语法一模一样,语法格式如下:
    create [or repalce] [algorithm = {undefined|merge|temptable}]
    view view_name [(column_list)]
    as select_statement
    [with [cascaded|local]check option];

    (2)使用 alter 语句来修改视图,语法格式如下:
    alter [algorithm = {undefined|merge|temptable}]
    view view_name [(column_list)]
    as select_statement
    [with [cascaded|local]check option];

    example:

    alter view tech_view2(教工号, 姓名, 职称)
    as
    select Teacher_id, Teacher_Name, Major
    from tech_view1
    where profesional like N'%教授' and (Department_name = N'信息学院' or Department_name = N'机械学院');
    

    3 视图数据更新、删除

    3.1 视图数据更新

    更新视图:通过视图来插入、更新、删除表中的数据,因为视图是一个虚拟表,其中没有数据。视图的更新实际上转到基本表上进行更新,即对视图增加或者删除记录,实际上是对其基本表增加或者删除记录。

    本节将介绍 3 种视图更新的方法:insert、update、delete;

    (1)使用 insert 语句在视图中插入一条数据,其语法与向表中插入数据相同。
    语法:

    • insert [into] view_name [(col_name,…)]
      values ({expr|default},…),(…),…

    (2)使用update语句更新视图数据,其语法与表数据更新相同。
    语法:

    • update view_name
      set col_name1= [,col_name2=expr2 …]
      [where子句]

    (3)使用 delete 语句删除视图一条数据,其语法与向表数据删除相同。
    语法:

    • delete
      from view_name
      [where子句]
    # 使用insert语句,向视图stu_viewB中插入一条数据
    insert into stu_viewb values
    ('M20177010', '张小明', '123456', '男', '102', '2005', '2000-01-01', '11000000003', '上海');
    
    update stu_viewb
    set passord = '123666' where student_id = 'M20177010';
    
    update tech_view1
    set Department_name = '信息学院' where Teacher_id = 'T0003';
    
    update tech_view1
    set profesional  = '副教授' where Teacher_id = 'T0003';
    
    delete from stu_viewb
    where student_id = 'M20177010';
    

    结论 :
    1 、视图若只依赖于一个基表 ,则可以直接通过视图来更新基本表数据;
    2 、视图若依赖于多张基表 ,则一次只能修改一个基表的数据,不能同时修改多个基表的 数据。

    注意:当视图中包含如下内容时,视图更新操作将不会被执行:

    1. 视图中不包含基本表中被定义为非空的列;
    2. 在定义视图的 select 语句后的字段列表中使用了数学表达式;
    3. 在定义视图的 select 语句后的字段列表中使用了聚合函数;
    4. 在定义视图的 select 语句引用不可更新视图;
    5. 在定义视图的 select 语句中使用了 distinct、union、top、group by、order by、having 字句。

    3.2 删除视图

    当视图不再需要时,可以将其删除。删除视图时,只能删除视图的定义,不会删除数据。MySQL 数据库中,用户必须拥有 drop 权限才能删除视图。使用 drop view 命令进行删除,可以删除一个或多个视图,各视图名之间用逗号分隔。

    语法:

    • drop view [if exists]
      view_name [, view_name]
      [ restrict | cascade]

    example:

    # 删除视图stu_viewA
    drop view stu_viewA;
    
    展开全文
  • mysql中视图里的使用子查询

    千次阅读 2018-07-19 10:32:50
    有人说视图里不能使用子查询。其实不完全对。mysql 目前版本, 大部分SELECT,WHERE,GROUP,ORDER 子句还是可以使用子查询的,如: -- SELECT 简单输出的子查询 可以 create or replace view vtest AS select...
  • 少数情况下,您需要使用 CREATE STATISTICS 创建附加的统计信息或修改查询设计以提高查询性能。 筛选的统计信息可以提高从定义完善的数据子集选择数据的查询查询性能。筛选的统计信息 WHERE 子句使用筛选...
  • 数据库的查询视图

    万次阅读 2012-05-28 20:13:03
    第4章 数据库的查询视图 4.1.1 选择列 通过SELECT语句的项组成结果表的列。 ::= SELECT [ ALL |DISTINCT ] [ TOP n [ PERCENT ] [ WITH TIES ] ] { * /*选择当前表或视图的所有列*/ | { table_name |view_...
  • sql2000 为给定表或视图创建索引

    千次阅读 2012-02-12 15:01:44
    Transact-SQL 参考 ...为给定表或视图创建索引。...表或视图的所有者可以...可以通过指定限定的数据库名称,为另一个数据库的表或视图创建索引。 语法 CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] IND
  • 例如,查询优化器可以使用基数估计在查询计划选择索引查找运算符而不是索引扫描运算符,从而通过避免消耗大量资源的索引扫描来提高查询性能。 查询优化器将表或索引视图统计信息存储在统计信息对象。对于表,...
  • Jaspersoft Studio 是基于 Eclipse 平台,所以它的主界面与 Eclipse 很相似:1 Eclipse 的 全景视图默认是打开 Jaspersoft Studio 的全景视图,可以凭自己的喜好,任意关闭或者拖拉里面的某个视图。 可以通过 Window...
  • 关于对视图创建索引的一些问题

    千次阅读 2007-08-07 17:14:00
    今天晚上网上找了一些关于对视图创建索引的文章,比较不错,发上来:第一篇 聚集索引与非聚集索引索引是数据库表或者视图上创建的对象,目的是为了加快对表或视图的查询的速度按照存储方式分为:聚集与非聚集...
  • 数据库视图

    2013-10-18 09:43:14
     2:视图刚刚打开的一瞬间,通过定义从基表搜集数据,并展现给用户  视图查询的区别:  视图查询都是用由sql语句组成,这是他们相同的地方,但是视图查询有着本质区别:  它们的区别在于:  1:...
  • 数据库SQL2008 ...SELECT count(*) FROM sys.objects WHERE type='U'视图个数 SELECT count(*) FROM sys.objects WHERE type='V'存储过程个数 SELECT count(*) FROM sys.objects WHERE type='P'
  • Oracle-视图

    2020-03-12 11:16:04
    项目开发,有时候会用到多表查询,有很多种方法,比如关联,比如视图,但对于查询来说,视图查询是最快的,如果你的数据库的字段信息很多,那查询就得整表查,比如两表查询,我们就可以把要的字段抽取出来,放在...
  • A:新建视图查询部分如下 select `now`.`time` AS `time`, sum((case when (`now`.`situation` = 1) then 1 else 0 end)) AS `proportion1`, sum((case when (`now`.`situation` = 2) then 1 else 0 end)) AS `...
  • 现在,ASP.NET MVC 6 支持注入类到视图中,和VC类不同的是,对类是公开的、非嵌套或非抽象并没有限制。这个例子,我们创建了一个简单的类,用于统计代办事件、已完成事件和平均优先级的服务。
  • 数据库查询的5种视图以及作用

    千次阅读 2011-08-31 21:03:21
    1、单源表视图  视图的数据可以只取自一个基本表的部分行、列,这样的视图行列与基本表行列对应。... 视图的数据可以来自多个表,这样定义的视图一般只用于查询,不用于修改数据。 3、已有视
  • oracle 视图 创建 操作 简单 复杂 基表 不存在 增 删 改 插入 修改 删除 查看 结构视图的概念   视图是基于一张表或多张表或另外一个视图的逻辑表。视图不同于表,视图本身不包含任何数据。表是实际...
  • 史上最简单MySQL教程详解(进阶篇)之视图 为什么要用视图 视图的本质 视图的作用 如何使用视图 ...在设计数据库的过程,为了防止数据的冗长性(即:同样的数据多个表重复出现的情况),就...
  • SQL Server数据库视图详解

    千次阅读 2014-04-23 14:00:00
    1:什么是视图 2:视图查询的区别 3:视图的优点 4:如何创建和管理视图 5:如何通过视图修改基本表的数据 6:如何通过视图实现数据的安全性 ...2:视图刚刚打开的一瞬间,通过定义从基表搜集数据,并展现
  • Qt模型/视图结构

    万次阅读 2015-11-12 15:19:36
    8.1 概述 ...(Model)、表示用户界面的视图(View)和定义了用户界面上的操作控制(Controller)。 与MVC设计模式类似,Qt引入了模型/视图结构用于完成数据与界面的分离,即InterVie
  • 利用“4+1”视图建模方法进行软件架构设计

    万次阅读 多人点赞 2017-05-07 18:42:16
    利用“4+1”视图建模方法进行“精准扶贫管理系统”的软件架构设计 利用41视图建模方法进行精准扶贫管理系统的软件架构设计 41视图建模方法 利用41视图建模方法进行精准扶贫管理系统的软件架构设计过程 1 精准扶贫...
  • Oracle普通视图和物化视图的区别

    千次阅读 2017-01-09 11:25:21
    转自:...普通视图是虚拟表,应用的局限性大,任何对视图查询,Oracle都实际上转换为视图SQL语句的查询。这样对整体查询性能的提高,并没有实质上的好处。1、物化视图的类型:ON DEMAN
  • oracle 普通视图 和 物化视图 的区别

    千次阅读 2015-06-01 15:02:18
    物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性大,... 二者的区别在于刷新方法的不同,ON DEMAND顾名思义,仅该物化视图“需要”被刷新了,才进行
  • MySQL视图及性能问题

    千次阅读 2016-04-13 14:56:18
    视图是MySQL 5.0增加的三大新功能之一(另外两个是存储过程与触发器),也是一般...MySQL定义视图上没什么限制,基本上所有的查询都可定义为视图,并且也支持可更新视图(当然只有在视图和行列与基础表的行列之间存
  • 数据库之视图、索引

    千次阅读 2016-10-10 09:03:01
    数据库视图以及索引的概念和作用介绍
  • 他会任何普通Bean实例化之前加载. 2. 实例化剩下的Bean,对这些Bean进行依赖注入。 3. 如果Bean有实现BeanNameAware的接口那么对这些Bean进行调用 4. 如果Bean有实现BeanFactoryAware接口的那么对这些...
  • Axure(7和9的版本)我们更方便地创建自适应原型。我们可以通过这个功能——“Adaptive Views”(自适应视图)来实现这一点。 通过“Adaptive Views”(自适应视图),我们可以为某一屏生成不同的尺寸,并且...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 50,553
精华内容 20,221
关键字:

在设计视图中创建统计查询