• <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++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            帶檢查選項的嵌套視圖

            Posted on 2010-05-09 19:00 Prayer 閱讀(210) 評論(0)  編輯 收藏 引用 所屬分類: DB2

            先前定義的 NONFICTIONBOOKS 視圖只包含 BOOKTYPE 為 N 的行。如果向這個視圖中插入一個 BOOKTYPE 為 F 的行,DB2 將把該行插入到基表 BOOKS 中。但是,如果以后從視圖中進行選擇,通過該視圖卻看不到新插入的行。如果不想允許用戶插入視圖范圍以外的行,那么在定義視圖時可以使用檢查選項。使用 WITH CHECK OPTION 定義視圖會讓 DB2 檢查使用視圖的語句是否滿足視圖的條件。

              下面的語句用 WITH CHECK OPTION 定義一個視圖:

            CREATE VIEW NONFICTIONBOOKS AS
                SELECT * FROM BOOKS WHERE BOOKTYPE = 'N'
                WITH CHECK OPTION

              這個視圖仍然限制用戶只能看到非小說類的書;另外,它還防止用戶插入 BOOKTYPE 列的值不為 N 的行,并防止把現有行中 BOOKTYPE 列的值更新為 N 以外的值。例如,下列語句將不再允許使用:

            INSERT INTO NONFICTIONBOOKS VALUES (...,'F');
            UPDATE NONFICTIONBOOKS SET BOOKTYPE = 'F' WHERE BOOKID = 111

             

            在定義嵌套視圖時,檢查選項可以用于限制操作。但是,還可以指定其他子句來定義如何繼承限制。檢查選項可以定義為 CASCADED 或 LOCAL。如果沒有指定關鍵字,CASCADED 是默認值。為說明 CASCADED 和 LOCAL 行為的不同,我們來看幾個可能的場景。


            當用 WITH CASCADED CHECK OPTION 創建視圖時,所有針對該視圖執行的語句都必須滿足視圖和所有底層視圖的條件 —— 即使那些視圖不是帶檢查選項定義的,也是如此。假設在創建 NONFICTIONBOOKS 時沒有帶檢查選項,也可以使用 CASCADED 關鍵字在視圖 NONFICTIONBOOKS 的基礎上創建視圖 NONFICTIONBOOKS1:

            CREATE VIEW NONFICTIONBOOKS AS
                SELECT * FROM BOOKS WHERE BOOKTYPE = 'N'
            CREATE VIEW NONFICTIONBOOKS1 AS
                SELECT * FROM NONFICTIONBOOKS WHERE BOOKID > 100
                WITH CASCADED CHECK OPTION

              將不允許下列 INSERT 語句,因為它們不滿足其中至少一個視圖的條件:

            INSERT INTO NONFICTIONBOOKS1 VALUES( 10,..,'N')
            INSERT INTO NONFICTIONBOOKS1 VALUES(120,..,'F')
            INSERT INTO NONFICTIONBOOKS1 VALUES( 10,..,'F')

              但是,會 允許下面的 INSERT 語句,因為這兩個視圖的條件它都滿足:

            INSERT INTO NONFICTIONBOOKS1 VALUES(120,...,'N')

              接下來,假設用 WITH LOCAL CHECK OPTION 在視圖 NONFICTIONBOOKS 的基礎上創建視圖 NONFICTIONBOOKS2。現在,針對這個視圖執行的語句只需要滿足指定了檢查選項的視圖的條件:

            CREATE VIEW NONFICTIONBOOKS AS
                SELECT * FROM BOOKS WHERE BOOKTYPE = 'N'
            CREATE VIEW NONFICTIONBOOKS2 AS
                SELECT * FROM NONFICTIONBOOKS WHERE BOOKID > 100
                WITH LOCAL CHECK OPTION

              在這種情況下,將不允許下面的 INSERT 語句,因為它們不滿足 NONFICTIONBOOKS2 視圖的 BOOKID > 100 這個條件:


            INSERT INTO NONFICTIONBOOKS2 VALUES(10,..,'N')
            INSERT INTO NONFICTIONBOOKS2 VALUES(10,..,'F')

              但是,盡管值 N 不滿足 NONFICTIONBOOKS 視圖的 BOOKTYPE = 'N' 這個條件,也會允許下面的 INSERT 語句:

            INSERT INTO NONFICTIONBOOKS2 VALUES(120,..,'N')
            INSERT INTO NONFICTIONBOOKS2 VALUES(120,..,'F')

            久久99久久99小草精品免视看 | 日本精品久久久久久久久免费| 91精品国产高清91久久久久久| 成人久久综合网| 久久天天躁狠狠躁夜夜av浪潮| 伊人久久国产免费观看视频| 男女久久久国产一区二区三区| 久久国产精品一区二区| 亚洲精品无码久久久久AV麻豆| 亚洲精品白浆高清久久久久久| 亚洲国产成人久久综合碰碰动漫3d| 久久综合久久综合亚洲| 狠狠色婷婷综合天天久久丁香| 女人高潮久久久叫人喷水| 国产AV影片久久久久久| 日本人妻丰满熟妇久久久久久| 日日狠狠久久偷偷色综合0| 波多野结衣中文字幕久久| 久久AV无码精品人妻糸列| 爱做久久久久久| 国产成人精品久久一区二区三区| 亚洲欧洲精品成人久久曰影片| 久久夜色精品国产亚洲| 久久综合给合久久狠狠狠97色 | 99久久精品国产综合一区| 无码专区久久综合久中文字幕| 怡红院日本一道日本久久| 久久久久99精品成人片试看| 精品国产99久久久久久麻豆| 亚洲国产精品一区二区三区久久| 国产精品嫩草影院久久| 国产V综合V亚洲欧美久久| 久久久久亚洲AV无码麻豆| 亚洲AV无码久久精品成人 | 一97日本道伊人久久综合影院| 国产福利电影一区二区三区,免费久久久久久久精 | 精品国产乱码久久久久久人妻| 国产韩国精品一区二区三区久久| 欧美久久一区二区三区| 99999久久久久久亚洲| 色妞色综合久久夜夜|