精华内容
下载资源
问答
  • postgresql对视图优化

    千次阅读 2014-12-22 22:09:22
    postgresql对视图的处理

    //关系准备

    CREATE TABLE t01(a INT,b CHAR(32));
    CREATE VIEW v_t01 AS SELECT * FROM t01 WHERE a<10;

    //SQL准备

    SELECT * FROM v_t01 WHERE a<7;

    //测试:

    uu=# EXPLAIN SELECT * FROM v_t01 WHERE a<7;
                           QUERY PLAN                       
    --------------------------------------------------------
     Seq Scan on t01  (cost=0.00..17.35 rows=163 width=136)
       Filter: ((a < 10) AND (a < 7))
    (2 rows)

         从QUERY PLAN可以看出,现在是直接访问v_t01视图的基表t01,并且将视图的谓词条件与SQL语句的谓词条件组合,但是没有将谓词条件化简,很可惜,这点做的不是太好。我曾在MySQL做过同样的测试,MySQL处理机制一样,并没有化简谓词条件。

    展开全文
  • 数据库对原表是真实物理存在的表, 视图是对 一些原表 选择 部分列 合并成 的一个虚拟表格   原表: 视图:   以下情况不能对视图进行 插入/更新/删除 操作 ...

    数据库对原表是真实物理存在的表,

    视图是对  一些原表  选择  部分列  合并成  的一个虚拟表格

     

    原表:

    视图:

     

    以下情况不能对视图进行 插入/更新/删除 操作

    展开全文
  • 对视图进行 DML 操作

    千次阅读 2017-04-06 15:56:27
    以前只知道视图可以用来查询,最近才知道,原来视图还是可以像普通表一样...接下来,我将详细说明如何对视图进行数据的添加、修改和删除。 在切入主题之前,首先说明一下视图的格式定义: CREATE [OR REPLACE] [FOR
        以前只知道视图可以用来查询,最近才知道,原来视图还是可以像普通表一样进行增、删、改操作的。而我们通常用写的视图虽然仅仅只是用来进行查询,而且在建立查询视图的时候,我们从来没有考虑到将视图建立成只读格式,我意识到,事实上我们的视图是不安全的。
    接下来,我将详细说明如何对视图进行数据的添加、修改和删除。
    在切入主题之前,首先说明一下视图的格式定义:


    CREATE [ OR REPLACE] [ FORCE| NOFORCE] VIEW YOUR_VIEW_NAME
            (COLNAME1,COLNAME2,COLNAME3,...,COLNAMEn)
    AS
            [YOUR_QUERY_STATEMENTS WILL WRITE HERE !]
            [ WITH CHECK OPTION [ CONSTRAINTNAME constraint_name]]
            [ WITH READ ONLY]


    说明:
        首先我想说一下 FORCE 与 NOFORCE 的区别,有时候你在创建视图时可能会报一个“表或视图”不存在的错误。如果选择了 FORCE 选项,不论你的 SQL 是否有问题,只要符合语法规则,Oracle 都会按照你的意图将其创建。这样你就可以在视图建立好以后再建表,或者向表中加字段。
    其次就是 WITH CHECK OPTION ,这个条件一般对于查询类视图是没有太大的用途的。但是如果你要执行DML操作,那么,这个检查将会限制你只能访问被 Where 子句所限制了的记录。更或者确切的说,如果你所执行的操作影响到视图中的一条记录不再满足视图的限制条件,那么,Oracle 就不会允许你进行该操作。这样,事实上就保证了视图中数据的完整性。
    最后,也是最重要,用来保证视图安全性的 WITH READ ONLY 指令。默认情况下,Oracle中的视图如果没有申明只读,理论上都可以执行DML操作。因此,如果要保证你的视图是只读的,那就应该显式声明一下。其实,如果业务上没有在视图上执行 DML 操作的需求的话,一般建议在建立视图时都将其声明为只读格式的,这样不但保证了视图中数据不会被非法修改,而且从一定程度上还可以提升视图的执行效率。

        说了半天的闲话,我们现在开始聊聊如何对视图执行DML操作。如果是简单视图,而且没有声明 WITH READ ONLY 那你就放心大胆的执行吧,没什么不行的,为了说明问题,我们先小试牛刀。



    一:简单视图执行的 DML 操作

    首先,将设库中已经有Dept这张表,我们建一个视图,命名为 V_Dept ,定义过程如下:

    1>用到的表定义:

    CREATE TABLE DEPARTMENT
    (
      DEPARTMENTID  VARCHAR2(32 BYTE)               NOT NULL,
      NAME          VARCHAR2(32 BYTE)               NOT NULL,
      INNERCODE     VARCHAR2(3 BYTE)                NOT NULL,
      FULLNAME      VARCHAR2(32 BYTE),
      STATUS        VARCHAR2(1 BYTE)                NOT NULL,
      COMMENTS      VARCHAR2(100 BYTE)
    )


    2>视图定义:

        CREATE OR REPLACE VIEW V_Dept
        AS SELECT * FROM DEPT


        从定义中可以看出,事实上我们这里的定义方式跟 Oracle 视图定义的标准格式还有些出入,不过没关系,Oracle 在遇到没有定义字段名的视图时他会自动将原表中的字段名称当做视图的字段名称。执行编译,系统提示view created 。OK,我们接下来对这个简单视图进行数据的修改、增加和删除。

    首先我们对视图进行一次数据查询,执行如下:

    select * from v_dept

    返回消息>>11 rows return

    OK , 首先保证我们的表中有数据(没有数据的仁兄们就得自己想办法喽^^)。然后小试牛刀让我们来执行一条插入语句:

    Insert into v_dept
       (DEPARTMENTID, NAME, INNERCODE, FULLNAME, STATUS, COMMENTS)
     Values
       ('SP13618d5cWWWWW', '后勤公司', '17', '后勤服务公司', '0', '主要用于教学场地的管理');
    COMMIT;

    返回消息>>1 row inserted

    OK , 说明简单视图可以执行插入语句,接下来我们再试一下修改语句,我们同样还是修改刚才插入的这条记录:

    修改:update v_dept set DEPARTMENTID='SP13618d5c' where DEPARTMENTID='SP13618d5cWWWWW';
    删除:delete v_dept where DEPARTMENTID='SP13618d5c'

    执行上面的两条语句,我们可以看到对于简单视图我们可以像对真实表一样进行 DML 操作。那么对于复杂视图呢?

    二:复杂视图在有条件的情况下执行 DML 操作。

    具体的限制条件如下:
    1〉不允许违反约束的 DML 操作。
    2〉不能将一个值添加到包含算术表达式的列中
    3〉在非 key-preserved 表上不允许 DML 操作 .
    4〉在包含组函数、GROUP BY 子句、ROWNUM伪列或DISTINCT关键字的视图上不允许 DML 操作。

    >>未完待续....
    展开全文
  • 对视图创建索引

    千次阅读 2014-01-02 13:09:33
    提示 无法对视图创建 索引,因为该视图未绑定到架构 修改此问题 需要在 创建视图语句中加上 with SCHEMABINDING create View myView(id,code) with SCHEMABINDING as select id,code from dbo.mytable 注意,表的...
    提示 无法对视图创建 索引,因为该视图未绑定到架构
    
    修改此问题 需要在 创建视图语句中加上 with SCHEMABINDING
    create View myView(id,code) with SCHEMABINDING as select id,code from dbo.mytable
    注意,表的表达式必须使用两段式 dbo.mytable 否则会报
    "名称必须由两部分构成,并且对象不能引用自身。"
     sqlserver 2008 视图索引创建 在设计视图创建的话 默认 绑定到架构为否,TOP规范为是,这样再创建视图索引时就会出现视图未绑定到架构的错误信息,所以要在属性窗口改下 绑定到架构为是,TOP规范为否,还有就是count函数要变为COUNT_BIG函数;


    创建视图索引首先要把视图绑定到架构
    alter view view_prod_ProductProgress WITH SCHEMABINDING 
    as
    SELECT * from dbo.T1  as a inner join dbo.T2 as b on a.id=b.id
    绑定到架构时,使用表要由两部分构成,就是 dbo.T1
     
    接下来创建索引


    if (exists (select * from sys.indexes where name = 'idx_prod_ProductProgress_Sht'))
        drop index view_prod_ProductProgress.idx_prod_ProductProgress_Sht
    go
    create index idx_prod_ProductProgress_Sht
    on
    view_prod_ProductProgress(ProductProgressSht);
    报错:无法对视图 'view_prod_ProductProgress' 创建 索引。它没有唯一聚集索引。
    所以首先要创建聚集索引


    if (exists (select * from sys.indexes where name = 'idx_prod_ProductProgress_Sht'))
        drop index view_prod_ProductProgress.idx_prod_ProductProgress_Sht
    go
    create UNIQUE CLUSTERED index idx_prod_ProductProgress_Sht
    on
    view_prod_ProductProgress(ProductProgressSht);
    展开全文
  • sql server中对视图更新的规则

    千次阅读 2018-11-09 14:13:13
    定义视图后,对视图的查询没有什么限制,可以像对待表一样进行操作。但是, 如果对视图中的元组进行更新操作(INSERT,UPDATE,DELETE)将受到限制。概括起 来,关于可更新视图有以下三条规则: (1) 若视图是基于多个表...
  • oracle:对视图DML操作

    千次阅读 2018-08-23 12:14:10
    一、对视图进行DML操作  1.创建一个视图v_test  create or replace view v_test as select *from test where c_sec_code = '00939 HS'  2.向视图 v_test中进行insert操作  insert into v_test (c_sec_code,d...
  • Oracle的视图和SQLServer的视图基本一样。 视图,是一个虚拟的表,不会给视图分配存储空间。视图的建立需要依赖于单个或多个普通表,被依赖的普通表就成为"基表"。可以就像 用 select 语句类似,在某些表中选取字段...
  • MYSQL面试题 说说你对视图的理解?

    千次阅读 2019-02-28 20:39:32
    MYSQL面试题 说说你对视图的理解?
  • 提示 无法对视图创建 索引,因为该视图未绑定到架构 修改此问题 需要在 创建视图语句中加上 with SCHEMABINDING create View myView(id,code) with SCHEMABINDING as select id,code from dbo.mytable 注意,表的...
  • Oracle-31-对视图DML操作

    千次阅读 2016-04-15 08:55:35
    一、对视图进行DML操作 1.创建一个视图v_person create or replace noforce view v_person as select * from person where id between 1003 and 1007;   2.向视图v_person中进行insert操作 insert into v_...
  • 无法对视图创建聚集索引

    千次阅读 2013-05-13 17:53:42
    总结一下对视图创建聚集索引创建聚集索引的注意事项 一、视图必须绑定到架构。 要做到这点,在 CREATE VIEW 语句中,必须加上 WITH SCHEMABINDING,如果是使用企业管理器,则在设计界面的空白处点击右键,属性,...
  • PowerDesigner导出SQL中对视图的处理

    千次阅读 2017-03-31 10:02:14
    PowerDesigner导出SQL中对视图的处理 使用PD进行数据库设计已经相当长的时间了,可以说基本上从开始做数据库开发开始就使用它。但是今天还是遇到了一个小问题。 设计了一个小的服务端程序,使用的是MYSQL5.7的...
  • Hibernate对视图的关联删除

    千次阅读 2012-07-06 18:12:50
    Hibernate对视图的关联删除 场景 业务实体是基于视图加载的,具体业务场景需要对此实体进行删除。Hibernate会有如下执行删除操作的SQL:DELETE FROM V_CPM_ATX; 这样因为视图中的具体表之间存在有主/外键的约束...
  • 可以对视图进行增,改,查,操作,视图通常是有一个表或者多个表的行或列的子集。 通俗地理解就是,视图是从一个或多个表(或视图)导出的表。用户可以根据自己不同的需求,在物理的数据库上定义自己对数据库所要求...
  • 提示无法对视图创建索引,因为该视图未绑定到架构的解决方案 大家都知道视图了是可以建索引的,当然是有一定限制的,想在视图上建索引首先在创建视图时要这样写 create view 视图名称 with schemabinding as ...
  • 如题:   在创建视图后创建索引   提示 无法对视图创建 索引,因为该视图未绑定到架构   修改此问题 需要在 创建视图语句中加上 with SCHEMABINDING   create ...
  • 对视图有时为什么使用select top 100 percent 而不使用 select 呢
  • Hibernate对视图的操作

    万次阅读 2007-11-01 17:07:00
    Hibernate对视图进行操作时和对普通的表有些不同,下面就是一个Hibernate操作视图的例子:视图:SELECT a.SPID, a.SPKey, b.serviceID, b.serviceName, c.serviceItemID, c.itemNameFROM dbo.tbSPInfo a INNER JOIN ...
  • 在视图里面如果要对视图进行排序那么规定必须使用select top ..... from ... order by .... 如果要对整个视图排序,自然是select top 100 percent from ...... order by ......
  • 做sqlserver实验时,为一个视图建立索引时出现了“无法对视图 'V2' 创建 索引,因为该视图未绑定到架构”的错误,到网上搜了一下,需要为视图加上一条属性with SCHEMABINDING,于是修改视图alter view v2 ...
  • 解释:因为所创建的视图对其属性值进行了计算的其他形式上的改变,而对视图的更改最终表现为对表的更改而表中不存在视图的某一属性,或属性的性质不相同,则无法更改,这是一种视图机制。 转载于:...
  • 关于对视图创建索引的一些问题

    千次阅读 2007-08-07 17:14:00
    今天晚上在网上找了一些关于对视图创建索引的文章,比较不错,发上来:第一篇 聚集索引与非聚集索引索引是在数据库表或者视图上创建的对象,目的是为了加快对表或视图的查询的速度按照存储方式分为:聚集与非聚集...
  • mssql无法对视图创建索引 它包含text ntext image 或XML列:报错如上。 出现该问题的原因是因为表中的列,有的字段类型是text \ ntext \ image \ xml中的其中一种了。 把改字段的类型改下就可以了,对于包含以上...
  • mysql中可更新视图必须满足一定的条件,参见:...对于可更新的视图,在视图中的行和基表中的行之间必须具有一一的关系。还有一些特定的其他结构,这类结构会使得视图不...
  • 如何对视图更新的表数据进行刷新

    千次阅读 2018-05-24 14:03:41
    delete 表名;insert into 表名 select * from 对应的视图名;
  • 使用MyEclipse hibernate 视图对ORACLE的视图进行映射反向生成,比如ViewResult视图会生成两个类,一个hbm.xml文件,其中两个类名为:ViewResultId和ViewResult 配置文件为ViewResult.hbm.xml。那么使用...
  • 在下列情况中,视图被视为可更新的分区视图视图是一组 SELECT 语句,这些语句的结果集通过 UNION ALL 语句组合为一个结果集。每个 SELECT 语句引用一个 SQL Server 基表。该表可以是本地表,也可以是使用 4部分...
  • sql问题: 删除视图中的数据,其对应的基表中的数据会发生改变吗?
  • hibernate为视图建立实体映射!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 840,493
精华内容 336,197
关键字:

对视图