精华内容
下载资源
问答
  • 视图

    2013-10-07 19:44:54
    视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改视图基于的表称为基表。视图是存储在数据字典里的一条select语句。 通过创建视图可以提取数据的逻辑上的集合或...

    视图简介: 
    视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改。视图基于的表称为基表。视图是存储在数据字典里的一条select语句。 通过创建视图可以提取数据的逻辑上的集合或组合。 

    视图的优点: 
    1.对数据库的访问,因为视图可以有选择性的选取数据库里的一部分。 
    2.用户通过简单的查询可以从复杂查询中得到结果。 
    3.维护数据的独立性,试图可从多个表检索数据。 
    4.对于相同的数据可产生不同的视图。 

    视图的分类: 
    视图分为简单视图和复杂视图。 

    两者区别如下: 
    1.简单视图只从单表里获取数据,复杂视图从多表获取数据; 
    2.简单视图不包含函数和数据组,复杂视图包含; 
    3.简单视图可以实现DML操作,复杂视图不可以。 

    视图的创建: 

    CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name [(alias[, alias]...)] 
    AS subquery 
    [WITH CHECK OPTION [CONSTRAINT constraint]] 
    [WITH READ ONLY] 
    其中: 
    OR REPLACE:若所创建的试图已经存在,ORACLE自动重建该视图; 
    FORCE:不管基表是否存在ORACLE都会自动创建该视图; 
    NOFORCE:只有基表都存在ORACLE才会创建该视图: 
    alias:为视图产生的列定义的别名; 
    subquery:一条完整的SELECT语句,可以在该语句中定义别名; 
    WITH CHECK OPTION : 插入或修改的数据行必须满足视图定义的约束; 
    WITH READ ONLY : 该视图上不能进行任何DML操作。 

    例如:

    Sql代码   收藏代码
    1. CREATE  OR  REPLACE  VIEW  dept_sum_vw   
    2. (name,minsal,maxsal,avgsal)   
    3. AS SELECT d.dname,min(e.sal),max(e.sal),avg(e.sal)   
    4. FROM    emp e,dept d   
    5. WHERE  e.deptno=d.deptno   
    6. GROUP  BY  d.dname;   

     

    视图的定义原则: 
    1.视图的查询可以使用复杂的SELECT语法,包括连接/分组查询和子查询; 
    2.在没有WITH CHECK OPTION和 READ ONLY 的情况下,查询中不能使用 ORDER BY 子句; 
    3.如果没有为CHECK OPTION约束命名,系统会自动为之命名,形式为SYS_Cn; 
    4.OR REPLACE选项可以不删除原视图便可更改其定义并重建,或重新授予对象权限。 

    查询视图: 
    视图创建成功后,可以从视图中检索数据,这点和从表中检索数据一样。 
    示例: 
    SQL>SELECT * FROM dept_sum_vw; 

    修改视图: 
    通过OR REPLACE 重新创建同名视图即可。 

    删除视图: 
    DROP VIEW VIEW_NAME语句删除视图。 
    删除视图的定义不影响基表中的数据。 
    只有视图所有者和具备DROP VIEW权限的用户可以删除视图。 
    视图被删除后,基于被删除视图的其他视图或应用将无效。 

    查询视图定义: 
    SELECT view_name,text from user_views; 
    其中text显示的内容为视图定义的SELECT语句,可通过DESC USER_VIEWS 
    得到相关信息。 

    视图上的DML 操作: 
    DML操作应遵循的原则: 
    1.简单视图可以执行DML操作; 
    2.在视图包含GROUP 函数,GROUP BY子句,DISTINCT关键字时不能删除数据行; 
    3.在视图不出现下列情况时可通过视图修改基表数据或插入数据: 

    a.视图中包含GROUP 函数,GROUP BY子句,DISTINCT关键字; 
    b.使用表达式定义的列; 
    c.ROWNUM伪列。 
    d.基表中未在视图中选择的其他列定义为非空且无默认值。 
    WITH CHECK OPTION 子句 
    通过视图执行的INSERTS和UPDATES操作不能创建该视图检索不到的数据行, 因为它会对插入或修改的数据行执行完整性约束和数据有效性检查。 (也就是说在执行INSERTS、UPDATES时,WHERE条件中除需要INSERT、UPDATE本身的限制条件之外,还需要加上视图创建时的WHERE条件。) 

    例如: 

    CREATE OR REPLACE VIEW  vw_emp20 
    AS  SELECT *  FROM  emp 
    WHERE  deptno=20 
    WITH CHECK OPTION constraint  vw_emp20_ck; 
    视图 已建立。 

    查询结果: 

    SELECT empno,ename,job FROM vw_emp20; 
    EMPNO                ENAME                JOB 
    ---------------------           --------------          ------------- 
    7369                 SMITH                CLERK 
    7566                 JONES               MANAGER 
    7902                 FORD                ANALYST 
    修改: 

    UPDATE vw_emp20 
    SET        deptno=20 
    WHERE   empno=7902; 
    将产生错误: 

    UPDATE vw_emp20 

    ERROR 位于第一行: 
    ORA-01402:视图WITH CHECK OPTION 违反WHERE 子句 

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

    1,Oracle是可以通过视图来修改Base table的。所谓base table就是用来构建视图的表,也就是视图的数据来源表。但是这种修改是有条件的。比如: 
    create view v_emp as select empno,ename,job,deptno from emp where deptno=10 with check option constraint emp_cnst; 
    如果有这个限制,那么通过视图v_emp 插入数据的deptno字段的值必须是10,否则就会报“ORA-01402: 视图 WITH CHECK OPTIDN 违反 where 子句”的异常。 

    2,联结视图: 
    create view dept1_staff as select e.ename, e.empno, e.job, d.deptno, d.dname from emp e,dept d where e.deptno in (10,30) and e.deptno = d.deptno; 
    将两个表的数据联结起来,看起来应该是一个内联结(Inner joint)。 
    对于联结视图(Joint view)的修改规则稍显复杂,设计到所谓key_preserved table的概念。通过联结视图来修改基表,只有那些key_preserved 的表才能被修改。上述创建视图语句中emp和dept通过deptno进行联结构成视图时,emp就是key_preserved 表,而dept不是。为什么?因为在dept1_staff 中empno的值唯一的而deptno不是唯一的。所以emp是key_preserved 而dept不是。因此只能通过该视图来修改emp,而不能修改dept的数据。 

    3,Oracle视图非常强大的功能之一在于其可以创建一个带有错误的视图。比如说视图里的字段在基表里不存在,该视图仍然可以创建成功,但是非法的且无法执行。当基表里加入了该字段,或者说某个字段修改成视图里的该字段名称,那么视图马上就可以成为合法的。这个功能很有意思。 
    例子: 
    创建基表: create table v_test (name varchar2(32),age number(12)); 
    创建带错误的视图: 
    create force view view_test as select name,age,address from v_test;(注意加上force选项) 
    由于address字段在v_test里不存在,所以会报warning: View created with compilation errors的警告,而且执行select * from view_test;时会报“ORA-04063: view “SCOTT.VIEW_TEST” 有错误”的异常。 
    但是如果在v_test里加上address字段,那么视图就会合法。 
    对基表进行修改: 
    alter table v_test add (address varchar2(128)); 

    现在再执行select * from view_test;就会执行成功了。 

    from:http://www.blogjava.net/jinhualee/archive/2006/07/14/58115.html 


    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 


    其他问题总结: 
    1、视图上是否可以创建索引? 
    一般视图上不用建立索引,对视图的操作最终会转化为对表的操作。 
    一个讨论:http://www.itpub.net/viewthread.php?tid=150019&extra=&page=1 

    展开全文
  • daterangepicker 视图怎么修改成年月显示而不是显示年月日。最终做成这种结果 ![图片说明](https://img-ask.csdn.net/upload/201705/02/1493692880_728348.png)
  • 这些是JIRA的修改最终将扩展到所有董事会页面。 当前,敏捷板视图是唯一经过完全修改视图,任务板,仪表板和时间表都在不断改进。 所有这些都是通过时尚CSS使用CSS,以及通过用户脚本插件使用JS完成的。 这已...
  • oracle 视图的定义修改查询

    千次阅读 2011-11-27 15:12:48
    1.视图(VIEW) 1.1 概念  视图-----是由SELECT查询语句(可以是单表或者多表查询)定义的一个"逻辑表",只有定义而无数据,是一个"虚表". 在创建视图时,只是将视图的定义信息保存在数据字典中, 而并不将实际的数据...
    1.视图(VIEW)
    1.1 概念

          
     视图-----是由SELECT查询语句(可以是单表或者多表查询)定义的一个"逻辑表",只有定义而无数据,是一个"虚表". 在创建视图时,只是将视图的定义信息保存在数据字典中, 而并不将实际的数据复制到任何地方, 即不需要在表空间中为视图分配存储空间. 视图是查看和操纵基表数据的一种方法, 可以像使用表一样使用视图.
            
    tips: 查询视图没有什么限制, 插入/更新/删除视图的操作会受到一定的限制; 所有针对视图的操作都会影响到视图的基表; 为了防止用户通过视图间接修改基表的数据, 可以将视图创建为只读视图(带上with read only选项).
           
     视图中的数据会随基表的更新而自动更新.
             视图犹如基表的一个"窗口", 通过这个"窗口", 可以实施许多管理. 在一个视图中可以定义的最大列数为1000, 与表的限制相同.
             视图约束: 允许在视图上生成约束, 如"主键约束、唯一键约束、外键约束、检查约束"等. 但视图上的约束不是强制性的, 而是声明性的. 视图约束的语法与表相同. 在创建视图时, 可以使用with check option选项,给视图定义check约束,使其只能查询、操作满足check约束的记录行.
    1.2 作用
           
     1)提供各种数据表现形式, 可以使用各种不同的方式将基表的数据展现在用户面前, 以便符合用户的使用习惯(主要手段: 使用别名).
             2)隐藏数据的逻辑复杂性并简化查询语句, 多表查询语句一般是比较复杂的, 而且用户需要了解表之间的关系, 否则容易写错; 如果基于这样的查询语句创建一个视图, 用户就可以直接对这个视图进行"简单查询"而获得结果. 这样就隐藏了数据的复杂性并简化了查询语句. 这也是oracle提供各种"数据字典视图"的原因之一,all_constraints就是一个含有2个子查询并连接了9个表的视图(在catalog.sql中定义).
             3)执行某些必须使用视图的查询. 某些查询必须借助视图的帮助才能完成. 比如, 有些查询需要连接一个分组统计后的表和另一表, 这时就可以先基于分组统计的结果创建一个视图, 然后在查询中连接这个视图和另一个表就可以了.
            4)提供某些安全性保证. 视图提供了一种可以控制的方式, 即可以让不同的用户看见不同的列, 而不允许访问那些敏感的列, 这样就可以保证敏感数据不被用户看见.
            5)简化用户权限的管理. 可以将视图的权限授予用户, 而不必将基表中某些列的权限授予用户, 这样就简化了用户权限的定义.
    1.3 创建视图
            
    权限: 要在当前方案中创建视图, 用户必须具有create view系统权限; 要在其他方案中创建视图, 用户必须具有create any view系统权限. 视图的功能取决于视图拥有者的权限.
            语法: create [ or replace ] [ force ] view [schema.]view_name
                          [ (column1,column2,...) ]
                          as 
                          select ...
                          [ with check option ] [ constraint constraint_name ]
                          [ with read only ];
            
    tips:
            or replace: 如果存在同名的视图, 则使用新视图"替代"已有的视图
            force: "强制"创建视图,不考虑基表是否存在,也不考虑是否具有使用基表的权限
            column1,column2,...:视图的列名, 列名的个数必须与select查询中列的个数相同; 如果select查询包含函数或表达式, 则必须为其定义列名. 此时, 既可以用column1, column2指定列名, 也可以在select查询中指定列名.
            with check option: 指定对视图执行的dml操作必须满足“视图子查询”的条件即,对通过视图进行的增删改操作进行"检查",要求增删改操作的数据, 必须是select查询所能查询到的数据,   否则不允许操作并返回错误提示. 默认情况下, 在增删改之前"并不会检查"这些行是否能被select查询检索到. 
            with read only:创建的视图只能用于查询数据, 而不能用于更改数据.
    1.3.1 创建简单视图
            
    是指基于单个表建立的,不包含任何函数、表达式和分组数据的视图。
             示例1:基于emp表创建一个vw_emp视图
             create view vw_emp
             as
             select empno,ename,job,hiredate,deptno from emp; 
    --------创建简单视图
             desc vw_emp; --------象表一样使用
             select * from vw_emp where deptno=10; --------查询
             insert into vw_emp values(1234,'JACK','CLERK','29-4月-1963',10); --------增加
             update vw_emp set ename='刘德华' where ename='JACK'; --------更新
             delete vw_emp where ename='刘德华'; --------删除
             
             create view vw_emp_readonly
             as
             select empno,ename,job,hiredate,deptno from emp
             with read only ; --------创建只读视图,只能用于执行select语句
             delete from vw_emp_readonly where empno=1234; --------删除失败
             create view vw_emp_check
             as
             select empno,ename,job,hiredate,deptno 
             from emp where deptno=10
             with check option constraint vw_emp_chk ;
             --------创建检查视图:对通过视图进行的增删改操作进行检查,
                                           要求增删改操作的数据必须是select查询所能查询到的数据。
               
             insert into vw_emp_check
             values(1235,'JACK','CLERK','29-4月-1963',20);
             --------20号部门不在查询范围内,违反检查约束
             delete from vw_emp_check where empno=1234;
             --------所删除的数据在查询范围内,不违反检查约束
    1.3.2 创建连接视图
           
     是指基于多个表所创建的视图,即,定义视图的查询是一个连接查询。 主要目的是为了简化连接查询
             示例1: 查询部门编号为10和30的部门及雇员信息
                  create view vw_dept_emp
                  as
                  select a.deptno,a.dname,a.loc,b.empno,b.ename,b.sal
                  from dept a , emp b
                  where a.deptno=b.deptno 
                  and a.deptno in (10,30);
                  select * from vw_dept_emp;

    1.3.3 创建复杂视图
            是指包含函数、表达式、或分组数据的视图。主要目的是为了简化查询。 主要用于执行查询操作,并不用于执行DML操作。
              注意:当视图的select查询中包含函数或表达式时,必须为其定义列别名。
              示例1:查询目前每个岗位的平均工资、工资总和、最高工资和最低工资。
                  create view vw_emp_job_sal
                  (job,avgsal,sumsal,maxsal,minsal)
                  as
                  select job,avg(sal),sum(sal),max(sal),min(sal)
                  from emp
                  group by job;
                  select * from vw_emp_job_sal;
    1.3.4 强制创建视图
           
     正常情况下,如果基表不存在,创建视图就会失败。但是可以使用force选项强制创建视图(前提:创建视图的语句没有语法错误!),此时该视图处于失效状态。
             示例1:
                  create force view vw_test_tab
                  as
                  select c1,c2 from test_tab; 
    --------会出现“警告: 创建的视图带有编译错误。”
                  select object_name,status from user_objects
                  where object_name='VW_TEST_TAB'; --------视图状态:INVALID
                  select * from vw_test_tab; --------报错
                  create table test_tab --------先建表
                  (c1 number(9) primary key, c2 varchar2(20),c3 varchar2(30));
                  select * from vw_test_tab; --------自动编译失效的视图
                  select object_name,status from user_objects
                  where object_name='VW_TEST_TAB'; --------视图状态:VALID               
    1.4 更改视图
             
     在对视图进行更改(或重定义)之前,需要考虑如下几个问题:
              之一——由于视图只是一个虚表,其中没有数据,所以更改视图只是改变数据字典中对该视图的
                           定义信息,视图的所有基础对象都不会受到任何影响
              之二——更改视图之后,依赖于该视图的所有视图和PL/SQL程序都将变为INVALID(失效)状态
              之三——如果以前的视图中具有with check option选项,但是重定义时没有使用该选项,
                           则以前的此选项将自动删除。
    1.4.1 更改视图的定义
              方法——执行create or replace view语句。这种方法代替了先删除(“权限也将随之删除”)
                           后创建的方法,会保留视图上的权限,但与该视图相关的存储过程和视图会失效。
              示例1:create or replace view v_test_tab
                          as
                          select c1,c2||' + '||c3 c23 from test_tab;
       
    1.4.2 视图的重新编译
               语法:alter view 视图名 compile;
               作用:当视图依赖的基表改变后,视图会“失效”。为了确保这种改变“不影响”视图和依赖于该视图的
                         其他对象,应该使用 alter view 语句“明确的重新编译”该视图,从而在运行视图前发现重新
                         编译的错误。视图被重新编译后,若发现错误,则依赖该视图的对象也会失效;若没有错误,
                         视图会变为“有效”。
               权限:为了重新编译其他模式中的视图,必须拥有alter any table系统权限。
               注意:当访问基表改变后的视图时,oracle会“自动重新编译”这些视图。
               
    示例1:select last_ddl_time,object_name,status
                           from user_objects
                           where object_name='V_TEST_TAB';——视图的状态:有效
                           alter table test_tab modify (c2 varchar2(30));——修改c2列的长度
                           select last_ddl_time,object_name,status
                           from user_objects
                           where object_name='V_TEST_TAB';——视图的状态:失效
                           alter view v_test_tab compile;——明确的重新编译
                           select last_ddl_time,object_name,status
                           from    user_objects
                           where object_name='V_TEST_TAB';——视图的状态:有效
                思考:若上述代码修改的不是列长,而是表名,结果又会如何?
                          <警告:更改的视图带有编译错误;视图状态:失效>
                                               
    1.5 删除视图
           可以删除当前模式中的任何视图;
            如果要删除其他模式中的视图,必须拥有DROP ANY VIEW系统权限;
            视图被删除后,该视图的定义会从词典中被删除,并且在该视图上授予的“权限”也将被删除。
            视图被删除后,其他引用该视图的视图及存储过程等都会失效。
           示例1:drop view vw_test_tab;
    1.6 查看视图
           
     使用数据字典视图
             dba_views——DBA视图描述数据库中的所有视图
             all_views——ALL视图描述用户“可访问的”视图
             user_views——USER视图描述“用户拥有的”视图
             dba_tab_columns——DBA视图描述数据库中的所有视图的列(或表的列)
             all_tab_columns——ALL视图描述用户“可访问的”视图的列(或表的列)
             user_tab_columns——USER视图描述“用户拥有的”视图的列(或表的列)
             示例1:查询当前方案中所有视图的信息
             desc user_views;
             set long 400;
             select view_name,text from user_views;
             示例1:查询当前方案中指定视图(或表)的列名信息
             select * from user_tab_columns where table_name='VW_DEPT';
    1.7 在连接视图上执行DML操作
             
    在视图上进行的所有DML操作,最终都会在基表上完成;
             select 视图没有什么限制,但insert/delete/update有一些限制
    1.7.1 在视图上执行DML操作的步骤和原理
             
    第一步:将针对视图的SQL语句与视图的定义语句(保存在数据字典中)“合并”成一条SQL语句
             第二步:在内存结构的共享SQL区中“解析”(并优化)合并后的SQL语句
             第三步:“执行”SQL语句
                          示例:
                          假设视图v_emp的定义语句如下:
                          create view v_emp 
                          as
                          select empno,ename,loc
                          from employees emp,departments dept
                          where emp.deptno=dept.deptno and dept.deptno=10;
                          当用户执行如下查询语句时:
                          select ename from v_emp
                          where empno=9876;
                          oracle将把这条SQL语句与视图定义语句“合并”成如下查询语句:
                          select ename 
                          from employees emp,departments dept
                          where emp.deptno=dept.deptno and dept.deptno=10
                          and empno=9876;
            然后,解析(并优化)合并后的查询语句,并执行查询语句
    1.7.2 查询视图“可更新”(包括“增删改”)的列
            
    使用数据字典视图
             dba_updatable_columns——显示数据库所有视图中的所有列的可更新状态
             all_updatable_columns——显示用户可访问的视图中的所有列的可更新状态                                    
            user_updatable_columns——显示用户拥有的视图中的所有列的可更新状态
             示例1: 查询v_stu_dept中的哪些列是可更新的
                  select table_name,column_name,insertable,updatable,deletable
                  from    user_updatable_columns
                  where table_name='V_STU_DEPT';
    1.7.3 可更新连接视图
          
     如果创建连接视图的select查询“不包含”如下结构,
            并且遵守连接视图的“更新准则”,
           则这样的连接视图是“可更新”的:
            之一:集合运算符(union,intersect,minus)
            之二:DISTINCT关键字
            之三:GROUP BY,ORDER BY,CONNECT BY或START WITH子句
            之四:子查询
            之五:分组函数
            之六:需要更新的列不是由“列表达式”定义的
            之七:基表中所有NOT NULL列均属于该视图
    1.7.4 键值保存表
            如果连接视图中的一个“基表的键”(主键、唯一键)在它的视图中仍然存在,
             并且“基表的键”仍然是“连接视图中的键”(主键、唯一键);
             即,某列在基表中是主键|唯一键,在视图中仍然是主键|唯一键
             则称这个基表为“键值保存表”。
                  
             一般地,由主外键关系的2个表组成的连接视图,外键表就是键值保存表,而主键表不是。
    1.7.5 连接视图的更新准则
            之一:一般准则——(讲)
                            任何DML操作,只能对视图中的键值保存表进行更新,
                            即,“不能通过连接视图修改多个基表”;
                            在DML操作中,“只能使用连接视图定义过的列”;
                            “自连接视图”的所有列都是可更新(增删改)的
             之二:insert准则
                           在insert语句中不能使用“非键值保存表”中的列(包括“连接列”);
                           执行insert操作的视图,至少应该“包含”键值保存表中所有设置了约束的列;
                           如果在定义连接视图时使用了WITH CHECK OPTION 选项,
                           则“不能”针对连接视图执行insert操作                                     
            之三:update准则
                            键值保存表中的列是可以更新的;
                            如果在定义连接视图时使用了WITH CHECK OPTION 选项,
                            则连接视图中的连接列(一般就是“共有列”)和基表中的“其他共有列”是“不可”更新的,
                            连接列和共有列之外的其他列是“可以”更新的
           之四:delete准则
                            如果在定义连接视图时使用了WITH CHECK OPTION 选项,
                            依然“可以”针对连接视图执行delete操作
    展开全文
  • 目录 一、定义视图 1、建立视图 2、删除视图 二、查询视图 ...WITH CHECK OPTION:加上这个语句后即对视图修改需要符合定义视图时子查询中的条件表达式。 例1:单个表上的视图 CREATE VIE...

    目录

    一、定义视图

    1、建立视图

    2、删除视图

    二、查询视图

    三、更新视图

    四、视图的作用


    一、定义视图

    1、建立视图

    语法:CREATE VIEW 视图名 【列名】... AS 子查询 【WITH CHECK OPTION】

    WITH CHECK OPTION:加上这个语句后即对视图的修改需要符合定义视图时子查询中的条件表达式。

    例1:单个表上的视图

    CREATE VIEW IS_Student AS SELECT Sno, Sname, Sage FROM Student WHERE Sdept='IS';

    解释:建立信息系学生的视图。

    例2:多个表上的视图

    CREATE VIEW IS_S1(Sno, Sname, Grade) AS SELECT Student.Sno, Sname, Grade FROM Student, SC WHERE Sdept='IS' AND Student.Sno=SC.Sno AND SC.Cno='1';

    解释:建立信息系选修了1号课程的学生的视图。

    例3:在视图上建立视图

    CREATE VIEW IS_S2 AS SELECT Sno, Sname, Grade FROM IS_S1 WHERE Grade>=90;

    解释:建立信息系选修1号课程且成绩在90分以上的学生视图。

    例4:带虚拟列的视图(带表达式的视图)

    CREATE VIEW BT_S(Sno, Sname, Sbirth) AS SELECT Sno, Sname, 2014-Sage FROM Student;

    解释:反映学生出生年份的视图。

    例5:分组视图

    CREATE VIEW S_G(Sno, Gavg) AS SELECT Sno, AVG(Grade) FROM SC GROUP BY Sno;

    解释:将学生的学号及平均成绩定义为一个视图。

    2、删除视图

    语法:DROP VIEW 视图名;

    例:DROP VIEW S_G;

    二、查询视图

    视图定义后就可以向对基本表一样对视图进行查询了。

    例1:SELECT Sno, Sage FROM IS_Student WHERE Sage<20;

    解释:使用刚刚定义的视图IS_Student进行查询年龄小于20岁的学生。

    例2:SELECT * FROM IS_S1;

    解释:查询刚刚定义的视图IS_S1。

    三、更新视图

    由于视图是不实际存在的虚表,因此对视图的更新最终要转换为对基本表的更新。

    例:UPDATE IS_Student SET Sname='lili' WHERE Sno='201215125';

    解释:将信息系学生视图IS_Student中学号为“201215125”的学生姓名改为“lili”。

    四、视图的作用

          1) 视图能够简化用户的操作

          2) 视图使用户能以多种角度看待同一数据

          3) 视图对重构数据库提供了一定程度上的逻辑独立性

          4) 视图能够对机密数据提供安全保护

          5) 适当利用视图可以更清晰地表达查询

    注:有关MySql数据库的更多其他操作请参见MySql目录进行查找。(建议收藏)

    展开全文
  • Hibernate对视图的操作

    万次阅读 2011-11-17 16:48:32
    navi和t_news,由于涉及到分页查询,故不想自己手动去写sql语句来实现跨表查询,不但麻烦而且容易写错,所以想用Hibernate视图来完成该功能,因此上网查看了一些资料,并最终完美解决,故将解决方案记录如下: ...

            由于项目(ssh)有需求根据关键字查询位于同一服务器下不同数据库的2张表t_navi和t_news,由于涉及到分页查询,故不想自己手动去写sql语句来实现跨表查询,不但麻烦而且容易写错,所以想用Hibernate视图来完成该功能,因此上网查看了一些资料,并最终完美解决,故将解决方案记录如下:

     一、首先创建一个跨数据库视图

    mysql>create view db_cms.search_view as(select * from db_cms.t_navi)union all (select * from db_news.t_news);

    注:由于t_navi 和 t_news两张表字段数量和意义完全相同,所以这里使用了union all;

    二、生成POJO类和Hibernate配置文件

           如果怕自己容易写错,可以使用Myeclipse通过视图反向生成POJO类和**.hbm.xml,如果通过Myeclipse生成的话,将生成如下几个文件:

           SearchView.java            SearchViewId.java              SearchView.hbm.xml

           1、SearchView.java

    public class SearchView implements Serializable {
    	/**
    	 * 
    	 */
    	private static final long serialVersionUID = -1372050399492830775L;
    	private SearchViewId id;
    	
    	public SearchViewId getId() {
    		return id;
    	}
    
    	public void setId(SearchViewId id) {
    		this.id = id;
    	}
    }

            2、SearchViewId.java

    public class SearchViewId implements Serializable {
    	private static final long serialVersionUID = -2960868353091674237L;
    	private Integer id;
    	private String naviTitle;
    	private Boolean naviShow = true;
    	private Boolean treeShow = true;
    	private Boolean jumpHref = false;
    	private Boolean windowOpen = false;
    	private Integer auditStatus;
    	private Date createDate;
    	private Date updateDate;
    	private String content;
    	private String accessPath;
    	private String jumpHrefUrl;
    	
    	public Integer getId() {
    		return id;
    	}
    
    	public void setId(Integer id) {
    		this.id = id;
    	}
    
    	public String getNaviTitle() {
    		return naviTitle;
    	}
    
    	public void setNaviTitle(String naviTitle) {
    		this.naviTitle = naviTitle;
    	}
    
    	public Boolean getNaviShow() {
    		return naviShow;
    	}
    
    	public void setNaviShow(Boolean naviShow) {
    		this.naviShow = naviShow;
    	}
    
    	public Boolean getTreeShow() {
    		return treeShow;
    	}
    
    	public void setTreeShow(Boolean treeShow) {
    		this.treeShow = treeShow;
    	}
    
    	public Boolean getJumpHref() {
    		return jumpHref;
    	}
    
    	public void setJumpHref(Boolean jumpHref) {
    		this.jumpHref = jumpHref;
    	}
    
    	public Boolean getWindowOpen() {
    		return windowOpen;
    	}
    
    	public void setWindowOpen(Boolean windowOpen) {
    		this.windowOpen = windowOpen;
    	}
    
    	public Integer getAuditStatus() {
    		return auditStatus;
    	}
    
    	public void setAuditStatus(Integer auditStatus) {
    		this.auditStatus = auditStatus;
    	}
    
    	public Date getCreateDate() {
    		return createDate;
    	}
    
    	public void setCreateDate(Date createDate) {
    		this.createDate = createDate;
    	}
    
    	public Date getUpdateDate() {
    		return updateDate;
    	}
    
    	public void setUpdateDate(Date updateDate) {
    		this.updateDate = updateDate;
    	}
    
    	public String getContent() {
    		return content;
    	}
    
    	public void setContent(String content) {
    		this.content = content;
    	}
    
    	public String getAccessPath() {
    		return accessPath;
    	}
    
    	public void setAccessPath(String accessPath) {
    		this.accessPath = accessPath;
    	}
    
    	public String getJumpHrefUrl() {
    		return jumpHrefUrl;
    	}
    
    	public void setJumpHrefUrl(String jumpHrefUrl) {
    		this.jumpHrefUrl = jumpHrefUrl;
    	}
    }

              3、SearchView.hbm.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    
    <hibernate-mapping package="org.bgi.cms.domain" >
    	<class name="SearchView" table="search_view" >
    		<composite-id name="id" class="SearchViewId">
    			<key-property name="id" type="integer">
    		    	<column name="id"/>
    		   	</key-property>
    		   	<key-property name="naviTitle" type="string">
    		    	<column name="navi_title" length="255" />
    		   	</key-property>
    		   	<key-property name="naviShow" type="yes_no">
    		    	<column name="is_navi_show"/>
    		   	</key-property>
    		   	<key-property name="treeShow" type="yes_no">
    		    	<column name="is_tree_show"/>
    		   	</key-property>
    		   	<key-property name="jumpHref" type="yes_no">
    		    	<column name="is_jump_href"/>
    		   	</key-property>
    		   	<key-property name="windowOpen" type="yes_no">
    		    	<column name="is_window_open"/>
    		   	</key-property>
    		   	<key-property name="auditStatus" type="integer">
    		    	<column name="audit_status"/>
    		   	</key-property>
    		   	<key-property name="createDate" type="timestamp">
    		    	<column name="create_date"/>
    		   	</key-property>
    		   	<key-property name="updateDate" type="timestamp">
    		    	<column name="update_date"/>
    		   	</key-property>
    		   	<key-property name="content" type="text">
    		    	<column name="content"/>
    		   	</key-property>
    		   	<key-property name="jumpHrefUrl" type="string">
    		    	<column name="jump_href_url" length="255"/>
    		   	</key-property>
    		   	<key-property name="accessPath" type="string">
    		    	<column name="access_path" length="45"/>
    		   	</key-property>
    		</composite-id>
    	</class>
    </hibernate-mapping>

            注:由于视图是没有主键的,所以Myeclipse生成的hbm.xml配置文件会将所有字段放在一起当做联合主键,这样做有一个问题就是,一旦视图中某个字段为null的话,该条数据在做查询时是查不出来的,所以现在暂时还不能完全确定可以使用该配置文件(如果这些联合主键中的所有字段都是不能为空的话就没有问题,完全可以放心的使用工具生成的改配置文件),因为在我的项目中,视图中的content、jumpHrefUrl以及accessPath字段都是可以为空的,所以需要修改这3个文件,如下:

           1、SearchView.java红色的为修改的

    public class SearchView implements Serializable {
    	/**
    	 * 
    	 */
    	private static final long serialVersionUID = -1372050399492830775L;
    	private SearchViewId id;
    
    	private String content;
    	private String accessPath;
    	private String jumpHrefUrl;
    	
    	public SearchViewId getId() {
    		return id;
    	}
    
    	public void setId(SearchViewId id) {
    		this.id = id;
    	}
    	
    	public String getContent() {
    		return content;
    	}
    
    	public void setContent(String content) {
    		this.content = content;
    	}
    
    	public String getAccessPath() {
    		return accessPath;
    	}
    
    	public void setAccessPath(String accessPath) {
    		this.accessPath = accessPath;
    	}
    
    	public String getJumpHrefUrl() {
    		return jumpHrefUrl;
    	}
    
    	public void setJumpHrefUrl(String jumpHrefUrl) {
    		this.jumpHrefUrl = jumpHrefUrl;
    	}
    }
           2、 SearchViewId.java红色的为修改的
    public class SearchViewId implements Serializable {
    	private static final long serialVersionUID = -2960868353091674237L;
    	private Integer id;
    	private String naviTitle;
    	private Boolean naviShow = true;
    	private Boolean treeShow = true;
    	private Boolean jumpHref = false;
    	private Boolean windowOpen = false;
    	private Integer auditStatus;
    	private Date createDate;
    	private Date updateDate;
    
           //	private String content;
           //	private String accessPath;
           //	private String jumpHrefUrl;
    	
    	public Integer getId() {
    		return id;
    	}
    
    	public void setId(Integer id) {
    		this.id = id;
    	}
    
    	public String getNaviTitle() {
    		return naviTitle;
    	}
    
    	public void setNaviTitle(String naviTitle) {
    		this.naviTitle = naviTitle;
    	}
    
    	public Boolean getNaviShow() {
    		return naviShow;
    	}
    
    	public void setNaviShow(Boolean naviShow) {
    		this.naviShow = naviShow;
    	}
    
    	public Boolean getTreeShow() {
    		return treeShow;
    	}
    
    	public void setTreeShow(Boolean treeShow) {
    		this.treeShow = treeShow;
    	}
    
    	public Boolean getJumpHref() {
    		return jumpHref;
    	}
    
    	public void setJumpHref(Boolean jumpHref) {
    		this.jumpHref = jumpHref;
    	}
    
    	public Boolean getWindowOpen() {
    		return windowOpen;
    	}
    
    	public void setWindowOpen(Boolean windowOpen) {
    		this.windowOpen = windowOpen;
    	}
    
    	public Integer getAuditStatus() {
    		return auditStatus;
    	}
    
    	public void setAuditStatus(Integer auditStatus) {
    		this.auditStatus = auditStatus;
    	}
    
    	public Date getCreateDate() {
    		return createDate;
    	}
    
    	public void setCreateDate(Date createDate) {
    		this.createDate = createDate;
    	}
    
    	public Date getUpdateDate() {
    		return updateDate;
    	}
    
    	public void setUpdateDate(Date updateDate) {
    		this.updateDate = updateDate;
    	}
    
           //	public String getContent() {
           //		return content;
           //	}
           //
           //	public void setContent(String content) {
           //		this.content = content;
           //	}
           //
           //	public String getAccessPath() {
           //		return accessPath;
           //	}
           //
           //	public void setAccessPath(String accessPath) {
           //		this.accessPath = accessPath;
           //	}
           //
           //	public String getJumpHrefUrl() {
           //		return jumpHrefUrl;
           //	}
           //
           //	public void setJumpHrefUrl(String jumpHrefUrl) {
           //		this.jumpHrefUrl = jumpHrefUrl;
           //	}
    }
               3、 SearchView.hbm.xml红色的为修改的
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    
    <hibernate-mapping package="org.bgi.cms.domain" >
    	<class name="SearchView" table="search_view" >
    		<composite-id name="id" class="SearchViewId">
    			<key-property name="id" type="integer">
    		    	<column name="id"/>
    		   	</key-property>
    		   	<key-property name="naviTitle" type="string">
    		    	<column name="navi_title" length="255" />
    		   	</key-property>
    		   	<key-property name="naviShow" type="yes_no">
    		    	<column name="is_navi_show"/>
    		   	</key-property>
    		   	<key-property name="treeShow" type="yes_no">
    		    	<column name="is_tree_show"/>
    		   	</key-property>
    		   	<key-property name="jumpHref" type="yes_no">
    		    	<column name="is_jump_href"/>
    		   	</key-property>
    		   	<key-property name="windowOpen" type="yes_no">
    		    	<column name="is_window_open"/>
    		   	</key-property>
    		   	<key-property name="auditStatus" type="integer">
    		    	<column name="audit_status"/>
    		   	</key-property>
    		   	<key-property name="createDate" type="timestamp">
    		    	<column name="create_date"/>
    		   	</key-property>
    		   	<key-property name="updateDate" type="timestamp">
    		    	<column name="update_date"/>
    		   	</key-property>
    		</composite-id>
    		<property name="content" column="content" type="text" />
    		<property name="jumpHrefUrl" column="jump_href_url" type="string" length="255" />
    		<property name="accessPath" column="access_path" type="string" length="45" />
    	</class>
    </hibernate-mapping>

    展开全文
  • 如何修改SM30表维护视图的宽度和列标题+号 以下表ZFITHKONT为例 点击 实用程序→表格维护生成器,生成函数组ZFI_FUNC_GROUP, 并创建屏幕0001 用事务代码SM30查看生成的维护视图 不难发现上述的维护试图有2个很大...
  • Oracle视图

    2014-03-09 23:26:02
    视图来源于表,所有对视图数据的修改最终都会被反映到视图的基表中,这些修改必须服从基表的完整性约束,并同样会触发定义在基表上的触发器。(Oracle支持在视图上显式的定义触发器和定义一些逻辑约束) 2.视图的存储
  • Oracle 视图

    千次阅读 2012-08-14 23:52:38
    视图来源于表,所有对视图数据的修改最终都会被反映到视图的基表中,这些修改必须服从基表的完整性约束,并同样会触发定义在基表上的触发器。(Oracle支持在视图上显式的定义触发器和定义一些逻辑约束)  2.视图的...
  • mysql视图

    2015-08-22 05:37:11
    1.简介 视图是由查询结果形成的一张虚拟表。 2.使用场景1、如果某个查询结果出现的非常频繁,也就是,要经常拿这个查询结果来做子查询。...5.修改视图 alter view 视图名 as select 语句; 6.查看视图6.1使用desc语
  • 在工作中经常遇到移动端适配不同屏幕,需要在在不同分辨率下预览显示效果 , 在game视图下手动切换实在是麻烦 , 如果切换的需求频率不高还好 , 我就在想有没有可以使用快捷键就可以实现快速切换game视图中分辨率设置呢...
  • 使用MyEclipse hibernate 视图对ORACLE的视图进行映射反向生成,比如ViewResult视图会生成两个类,一个hbm.xml文件,其中两个类名为:ViewResultId和ViewResult 配置文件为ViewResult.hbm.xml。那么使用...
  • 我一直以来就在纳闷意见事情,就是像csdn一样,用户可以自己去修改自己的主页样式,而且是永久性的修改,很多的地方都请到了,把视图样式交给用户这也是未来发展的趋势,想QQ空间装扮,甚至一些建站程序的后台都是...
  • Oracle视图查询

    2016-04-18 22:11:28
    视图来源于表,所有对视图数据的修改最终都会被反映到视图的基表中,这些修改必须服从基表的完整性约束,并同样会触发定义在基表上的触发器。(Oracle支持在视图上显示的定义触发器和定义一些逻辑约束) 2.视图的存储 ...
  • 视图详解

    2013-09-21 16:30:05
    1,什么是视图?  2,为什么要用视图;  3,视图中的ORDER BY;  4,刷新视图;  5,更新视图;  6,视图选项;  7,索引视图; 1.什么是视图  视图是由一个查询所定义的虚拟表,它与...
  • mysql中可更新视图必须满足一定的条件,参见:...对于可更新的视图,在视图中的行和基表中的行之间必须具有一一的关系。还有一些特定的其他结构,这类结构会使得视图不...
  • oracle-视图

    千次阅读 2017-07-17 07:47:40
    视图 1.什么是视图【View】 (1)视图是一种虚表 (2)视图建立在已有表的基础上, 视图赖以建立的这些表称为基表 (3)向视图提供数据内容的语句为 SELECT...(6)程序员虽然操作的是视图,但最终视图还会转成操作基
  • 视图性能优化——索引视图

    万次阅读 2014-11-12 10:35:44
    原文:索引视图
  • Laravel 5.5 视图 - Blade 模板引擎

    千次阅读 2018-08-12 15:31:35
    所有的 Blade 视图最终都会被编译成原生 PHP 代码并缓存起来直到被修改,这意味着应用的性能而言 Blade 基本上是零开销。 Blade 视图文件(也叫模板文件)使用 .blade.php 文件扩展名,都存放...
  • MySQL视图

    千次阅读 2018-07-24 18:25:44
    MySQL视图 视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。作为一个select语句保存...简单:使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,用户来说已经是过滤好的复...
  • UML 视图

    千次阅读 热门讨论 2018-07-12 10:22:55
    事物(Things)、关系(Relationships) 是组成 UML 模型的基本模型元素,图由模型元素事物和关系构成,视图由各种图构成。 随着系统复杂性的增加,建模就成了必不可少的工作。理想情况下,系统由单一的图形来描述,...
  • 关于对视图创建索引的一些问题

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

    千次阅读 2011-05-29 16:01:00
    Posted on 2007-07-11 09:19 秋雨飘飘 阅读(1721) 评论(0)编辑收藏视图 1:什么是视图 2:视图和查询的区别 3:视图的优点 4:如何创建和管理视图 5:如何通过视图修改基本表的数据 ...
  • Oracle视图概念与语法

    2015-10-27 12:17:39
    视图来源于表,所有对视图数据的修改最终都会被反映到视图的基表中,这些修改必须服从基表的完整性约束,并同样会触发定义在基表上的触发器。(Oracle支持在视图上显式的定义触发器和定义一些逻辑约束)
  • 数据库视图详解

    万次阅读 多人点赞 2015-01-27 18:13:16
    视图与表(有时为与视图区别,也称表为基本表——Base Table)不同,视图是一个虚表,即视图所对应的数据不进行实际存储,数据库中只存储视图的定义,在对视图的数据进行操作时,系统根据视图的定义去操作与视图相...
  • SQL Server数据库视图详解

    千次阅读 2014-04-23 14:00:00
    5:如何通过视图修改基本表的数据 6:如何通过视图实现数据的安全性 A:什么是视图: 视图(view):从一个或几个基本表中根据用户需要而做成一个虚表 1:视图是虚表,它在存储时只存储视图的定义,而没有存储对应的数据 2:...
  • oracle 视图 创建 操作 简单 复杂 基表 不存在 增 删 改 插入 修改 删除 查看 结构视图的概念   视图是基于一张表或多张表或另外一个视图的逻辑表。视图不同于表,视图本身不包含任何数据。表是实际...
  • 解释:因为所创建的视图对其属性值进行了计算的其他形式上的改变,而对视图的更改最终表现为对表的更改而表中不存在视图的某一属性,或属性的性质不相同,则无法更改,这是一种视图机制。 转载于:...

空空如也

空空如也

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

对视图的修改最终