• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Prayer

            在一般中尋求卓越
            posts - 1256, comments - 190, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            SQL92,SQL SERVER,ORACLE,DB2可更新視圖概述

            Posted on 2009-06-30 19:35 Prayer 閱讀(417) 評論(0)  編輯 收藏 引用 所屬分類: DB2

            1.視圖概述

               視圖是從一個或多個基表(或視圖)導(dǎo)出的表。通常視圖僅僅是一個虛表,即數(shù)據(jù)庫中只存放視圖的定義信息等元數(shù)據(jù),而不存放視圖對應(yīng)的數(shù)據(jù)。 視圖上的操作和基表類似,但是 DBMS對視圖的更新操作(INSERT、DELETE、UPDATE)往往存在一定的限制。 DBMS對視圖進行的權(quán)限管理和基表也有所不同。
              
              視圖可以提高數(shù)據(jù)的邏輯獨立性,也可以增加一定的安全性。 DBMS在處理視圖時和基表存在很多不同的地方,例如:

            定義:基于基表或視圖
            數(shù)據(jù):一般不單獨存放
            查詢:允許,和基表類似
            插入:有限制
            刪除:有限制
            更新:有限制
            權(quán)限:有所不同
              本文主要討論視圖的可更新性,即考慮視圖上的更新類操作存在哪些特點和限制。

            2.SQL92定義的可更新視圖

              若一個視圖是從單個的基表導(dǎo)出的,并且只是去掉了基表的某些行和列,且保留了基表的主碼,這樣的視圖被稱為行列子集視圖。SQL92中對可更新視圖的支持非常有限,主要就是上述的行列子集視圖。 SQL92中對可更新視圖的要求如下:

            視圖定義必須是一個簡單的SELECT語句,不能帶連接、集合操作。即SELECT語句的FROM子句中不能出現(xiàn)多個表,也不能有 JOIN、EXCEPT、UNION、INTERSECT
            視圖定義的 SELECT子句中不能有DISTINCT
            SELECT子句中的各列必須來自于基表(視圖)的列,不能是表達式
            視圖所基于的基表(或視圖)必須是可更新的
            視圖定義的 SELECT子句的子查詢的FROM子句不能有視圖所基于的基表(或視圖)
            視圖定義的 SELECT語句中不能含有GROUP BY子句
            視圖定義的 SELECT語句中不能含有HAVING子句
              根據(jù)SQL92的定義,一個視圖要么是可更新的,要么是不可更新的,二者必居其一。SQL92 也不允許視圖中某些列可以更新,某些列不可以更新。

            3.SQL99(SQL3)定義的可更新視圖

              SQL99放寬了對可更新視圖的限制,甚至還區(qū)分了視圖是否可插入、列是否可 LL、連接查詢生成的視圖可更新。

            4.主流 DBMS對可更新視圖的支持

             (1)MS SQL Server 2000

              SQL Server 2000 除了支持SQL標(biāo)準(zhǔn)規(guī)定的可更新視圖,還提供了兩種擴充:

            INSTEAD OF 觸發(fā)器
            在視圖上創(chuàng)建這種類型的觸發(fā)器,可以間接地實現(xiàn)對基表的更新。
            某些分區(qū)視圖是可更新的
              對于不具備上述兩種特性的視圖, SQL Server 遵照SQL標(biāo)準(zhǔn)的規(guī)定做了如下限制:

            SELECT語句的結(jié)果列中沒有聚集函數(shù),SELECT子句中沒有TOP, GROUPBY, UNION,DISTINCT 子句
            這里沒有提到 INTERSECT, EXCEPT,是因為SQL Server不支持。
            SELECT語句的結(jié)果列中沒有導(dǎo)出列。即只能有列名。
            SELECT語句的FROM字句至少有一個表(或視圖)。
            因為 SQL Server支持不帶FROM子句的SELECT語句。例如:

            CREATE VIEW NoTable AS
              SELECT GETDATE() AS CurrentDate,
              @@LANGUAGE AS CurrentLanguage,
              CURRENT_USER AS CurrentUser;

            SELECT CURRENT_USER;

            UPDATE和INSERT,如果修改的數(shù)據(jù)僅涉及視圖所基于的一個基表,則可更新。DELETE則只能用于基于單個基表的視圖。
            分區(qū)視圖其實是用 UNION ALL聯(lián)合兩個或多個SELECT語句定義的視圖。

            SELECT
            基表的所有列必須都在 SELECT的結(jié)果列中。
            各個 SELECT語句的結(jié)果列對應(yīng)的列是同一類型和COLLATION。
            結(jié)果列中至少有一列上定義了簡單的 CHECK約束,保證該列取某個具體值的時候,要么不滿足所有表的CHECK約束,要么滿足其中一個表上的CHECK約束。即這些CHECK定義的值域是互不重疊的。
            這樣的列被成為分區(qū)列。表上的約束必須是打開的。
            表中的一個列最多在結(jié)果列中出現(xiàn)一次。

            PARTITIONED COLUMN
            分區(qū)列是主碼的一部分。
            分區(qū)列不能是computed column。
            該列上只能有1個約束。

            MEMBER TABLES

            表可以是本數(shù)據(jù)庫中的,也可以是其他數(shù)據(jù)庫中的,也可以是通過 OPENDATASOURCE 或 OPENROWSET-based引用的。
            同一個表只能在 CREATE VIEW語句中出現(xiàn)一次。
            不能在compute column上建有索引。
            表的主碼必須類似(建在同樣的列上)。
            所有表的 ANSI padding設(shè)置一致。

            其他關(guān)于分布式分區(qū)表的限制

             (2)ORACLE 8i/9i

              ORACLE允許用“WITH READ ONLY”子句顯式地指定視圖是只讀的。若視圖不帶上述子句,則ORACLE遵照SQL標(biāo)準(zhǔn)提出了以下限制:

            不能有集合操作(UNION,UNION ALL,INTERSECT,MINUS)
            不能有DISTINCT
            不能有聚集函數(shù)(AVG,COUNT,MAX,MIN等)和分析函數(shù)
            不能有GROUP BY,ORDER BY,CONNECT BY,START WITH
            SELECT列表中不能出現(xiàn)collection expression
            SELECT列表中不能有子查詢
            一般不能是JOIN查詢(參見i)
            SELECT列表中若出現(xiàn)系統(tǒng)的偽列或表達式,則更新語句不能修改這些列
            可更新的連接視圖要滿足一些額外的條件
            簡單的說,視圖定義中用到的基本表必須是“鍵值保持表”。(A base table of a view is considered a key-preserved table if every primary-key or unique-key value in the base table is also unique in the result set of the join view—in other words, if the entity integrity of the base table is preserved by the join view. )
              我們還可以用INSTEAD OF 觸發(fā)器來實現(xiàn)視圖的更新。詳細的信息還請參考文獻[7]。

            (3)DB2V8

              DB2將視圖區(qū)分為可刪除視圖、可更新視圖、可插入視圖、只讀視圖、不可用視圖等。這樣的劃分應(yīng)該更為合理,也比較好理解。DB2的可更新視圖:

            允許更新某些UNION ALL視圖
            不允許更新象ORACLE支持的連接查詢視圖
              也可以用INSTEAD OF 觸發(fā)器來實現(xiàn)視圖的更新操作。詳細的信息還請參考文獻[8]。

              主要的幾個 DBMS 都實現(xiàn)了 SQL92 定義的可更新視圖,SQL99 定義的可更新視圖也或多或少的得到了支持。但是需要注意的是,產(chǎn)品之間對可更新視圖的實現(xiàn)程度是有差異的,而且由于它們支持的SQL語法存在一些差異,要書寫可移植的 SQL 語句需要特別注意。

            5.可更新視圖的進一步探討

              E.F.Codd提出了評價全關(guān)系系統(tǒng)的12條準(zhǔn)則。其中的準(zhǔn)則6就是討論視圖的更新的。準(zhǔn)則6的內(nèi)容如下:
                準(zhǔn)則6:視圖更新準(zhǔn)則。所有理論上可以更新的視圖也應(yīng)該允許由系統(tǒng)更新。
              理論上可以更新的視圖指的是對視圖的更新要求,存在一個與時間無關(guān)的算法,可以無二義性地把更新要求轉(zhuǎn)換為對基表的更新序列。視圖更新準(zhǔn)則對于系統(tǒng)對數(shù)據(jù)的邏輯獨立性支持是非常重要的。
              
              C. J. Date在文獻[2]和他的很多技術(shù)文章中對SQL標(biāo)準(zhǔn)定義的可更新視圖提出了批評,并提出了自己的一系列觀點。他的基本觀點是所有的視圖本質(zhì)都是可以更新的,只是某些時候要受制于完整性約束。這是一種比較美妙的境界,實際的 DBMS產(chǎn)品當(dāng)然還不可能做到這樣完美。

            參考文獻:

            1.薩師煊、王珊,數(shù)據(jù)庫系統(tǒng)概論(第三版),高等教育出版社,2000
            2.C. J. Date,An Introduction to Database Systems (Seventh Edition),機械工業(yè)出版社,2002
            3.SQL92, ANSI/ISO/IEC 9075:1992
            4.SQL99, ANSI/ISO/IEC 9075-2:1999
            5.Peter Gulutzan, Trudy Pelzer, 齊舒創(chuàng)作室譯, SQL-3 參考大全, 機械工業(yè)出版社,2001
            6.Microsoft, http://msdn.microsoft.com, SQL Server 2000 Online Book
            7.Oracle, http://otn.oracle.com, Oracle 9i SQL Reference
            8.IBM, http://www.ibm.com, IBM DB2 Universal Database SQL Reference Volume 2
            9.http://www.oracle.com/oramag/oracle/01-mar/index.html?o21o8i.html
            10.http://www-900.ibm.com/developerWorks/cn/dmdd/library/techarticles/0210rielau/0210rielau.shtml

             

            本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/yzsind/archive/2007/01/10/1478753.aspx

            本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/yzsind/archive/2007/01/10/1478753.aspx

            久久天天躁狠狠躁夜夜躁2O2O | 亚洲国产婷婷香蕉久久久久久| 久久精品一区二区| 久久99精品国产99久久6| 久久人搡人人玩人妻精品首页| 久久AV高潮AV无码AV| 香蕉久久夜色精品国产小说| 99久久免费国产精品特黄| 国产精品美女久久久久网| 四虎影视久久久免费观看| 99精品久久精品一区二区| 久久露脸国产精品| 91精品国产综合久久精品| 久久亚洲国产最新网站| 国产A级毛片久久久精品毛片| 免费无码国产欧美久久18| 夜夜亚洲天天久久| 久久99亚洲网美利坚合众国| 久久人妻少妇嫩草AV无码蜜桃| 久久ZYZ资源站无码中文动漫| 2021国产精品午夜久久| 久久精品人妻一区二区三区| 国产精品久久久久久影院| 亚洲色大成网站WWW久久九九| 久久人妻少妇嫩草AV蜜桃| 九九热久久免费视频| 久久精品国内一区二区三区| 国产精品一区二区久久不卡| 欧美精品国产综合久久| 精品人妻伦九区久久AAA片69| 久久久青草青青国产亚洲免观| 久久996热精品xxxx| 人人狠狠综合久久亚洲| 热RE99久久精品国产66热| 亚洲v国产v天堂a无码久久| 久久国产午夜精品一区二区三区| 国产精品毛片久久久久久久| 国产69精品久久久久777| 欧美亚洲国产精品久久蜜芽| 国产精品九九久久免费视频| 狠狠色伊人久久精品综合网 |