<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    freefly
    一門(mén)技術(shù),如果不能講出來(lái),那么就是沒(méi)有理解,如果不能很好的講出來(lái),那么就是理解不夠透徹!
    posts - 9,comments - 3,trackbacks - 0

     

          視圖是一個(gè)虛擬表,其內(nèi)容由查詢定義。同真實(shí)的表一樣,視圖包含一系列帶有名稱的列和行數(shù)據(jù)。但是,視圖并不在數(shù)據(jù)庫(kù)中以存儲(chǔ)的數(shù)據(jù)值集形式存在。行和列數(shù)據(jù)來(lái)自由定義視圖的查詢所引用的表,并且在引用視圖時(shí)動(dòng)態(tài)生成。

          對(duì)其中所引用的基礎(chǔ)表來(lái)說(shuō),視圖的作用似于篩選。定義視圖的篩選可以來(lái)自當(dāng)前或其它數(shù)據(jù)庫(kù)的一個(gè)或多個(gè)表,或者其它視圖。分布式查詢也可用于定義使用多個(gè)異類源數(shù)據(jù)的視圖。如果有幾臺(tái)不同的服務(wù)器分別存儲(chǔ)組織中不同地區(qū)的數(shù)據(jù),而您需要將這些服務(wù)器上相似結(jié)構(gòu)的數(shù)據(jù)組合起來(lái),這種方式就很有用。

          通過(guò)視圖進(jìn)行查詢沒(méi)有任何限制,通過(guò)它們進(jìn)行數(shù)據(jù)修改時(shí)的限制也很少。


    一、視圖的作用

          * 簡(jiǎn)單性。看到的就是需要的。視圖不僅可以簡(jiǎn)化用戶對(duì)數(shù)據(jù)的理解,也可以簡(jiǎn)化他們的操作。那些被經(jīng)常使用的查詢可以被定義為視圖,從而使得用戶不必為以后的操作每次指定全部的條件。

          * 安全性。通過(guò)視圖用戶只能查詢和修改他們所能見(jiàn)到的數(shù)據(jù)。數(shù)據(jù)庫(kù)中的其它數(shù)據(jù)則既看不見(jiàn)也取不到。數(shù)據(jù)庫(kù)授權(quán)命令可以使每個(gè)用戶對(duì)數(shù)據(jù)庫(kù)的檢索限制到特定的數(shù)據(jù)庫(kù)對(duì)象上,但不能授權(quán)到數(shù)據(jù)庫(kù)特定行和特定的列上。通過(guò)視圖,用戶可以被限制在數(shù)據(jù)的不同子集上:

          使用權(quán)限可被限制在基表的行的子集上。
          使用權(quán)限可被限制在基表的列的子集上。
          使用權(quán)限可被限制在基表的行和列的子集上。
          使用權(quán)限可被限制在多個(gè)基表的連接所限定的行上。
          使用權(quán)限可被限制在基表中的數(shù)據(jù)的統(tǒng)計(jì)匯總上。
          使用權(quán)限可被限制在另一視圖的一個(gè)子集上,或是一些視圖和基表合并后的子集上。

          * 邏輯數(shù)據(jù)獨(dú)立性。視圖可幫助用戶屏蔽真實(shí)表結(jié)構(gòu)變化帶來(lái)的影響。

    二、視圖的優(yōu)點(diǎn)

          (1)視圖能簡(jiǎn)化用戶的操作
          (2)視圖機(jī)制可以使用戶以不同的方式查詢同一數(shù)據(jù)
          (3)視圖對(duì)數(shù)據(jù)庫(kù)重構(gòu)提供了一定程度的邏輯獨(dú)立性
          (4)視圖可以對(duì)機(jī)密的數(shù)據(jù)提供安全保護(hù)

    三、視圖的安全性

          視圖的安全性可以防止未授權(quán)用戶查看特定的行或列,是用戶只能看到表中特定行的方法如下:

          1 在表中增加一個(gè)標(biāo)志用戶名的列;

          2 建立視圖,是用戶只能看到標(biāo)有自己用戶名的行;

          3 把視圖授權(quán)給其他用戶。

    四、邏輯數(shù)據(jù)獨(dú)立性

          視圖可以使應(yīng)用程序和數(shù)據(jù)庫(kù)表在一定程度上獨(dú)立。如果沒(méi)有視圖,應(yīng)用一定是建立在表上的。有了視圖之后,程序可以建立在視圖之上,從而程序與數(shù)據(jù)庫(kù)表被視圖分割開(kāi)來(lái)。視圖可以在以下幾個(gè)方面使程序與數(shù)據(jù)獨(dú)立:

          1 如果應(yīng)用建立在數(shù)據(jù)庫(kù)表上,當(dāng)數(shù)據(jù)庫(kù)表發(fā)生變化時(shí),可以在表上建立視圖,通過(guò)視圖屏蔽表的變化,從而應(yīng)用程序可以不動(dòng)。

          2 如果應(yīng)用建立在數(shù)據(jù)庫(kù)表上,當(dāng)應(yīng)用發(fā)生變化時(shí),可以在表上建立視圖,通過(guò)視圖屏蔽應(yīng)用的變化,從而使數(shù)據(jù)庫(kù)表不動(dòng)。

          3 如果應(yīng)用建立在視圖上,當(dāng)數(shù)據(jù)庫(kù)表發(fā)生變化時(shí),可以在表上修改視圖,通過(guò)視圖屏蔽表的變化,從而應(yīng)用程序可以不動(dòng)。

          4 如果應(yīng)用建立在視圖上,當(dāng)應(yīng)用發(fā)生變化時(shí),可以在表上修改視圖,通過(guò)視圖屏蔽應(yīng)用的變化,從而數(shù)據(jù)庫(kù)可以不動(dòng)。

    五、視圖的書(shū)寫(xiě)格式

    CREATE VIEW <視圖名>[(列名組)]
    AS <子查詢>

    DROP VIEW <索引名>

    注意:視圖可以和基本表一樣被查詢,但是利用視圖進(jìn)行數(shù)據(jù)增,刪,改操作,會(huì)受到一定的限制。

    (1)由兩個(gè)以上的基本表導(dǎo)出的視圖
    (2)視圖的字段來(lái)自字段表達(dá)式函數(shù)
    (3)視圖定義中有嵌套查詢
    (4)在一個(gè)不允許更新的視圖上定義的視圖

    六、創(chuàng)建和管理視圖

    (創(chuàng)建視圖時(shí)注意事項(xiàng)的介紹)

    (一). 利用企業(yè)管理器創(chuàng)建與管理視圖

          1.使用企業(yè)管理器創(chuàng)建視圖:
          2.使用企業(yè)管理器的“向?qū)?#8221;創(chuàng)建視圖:   
          3.使用企業(yè)管理器的修改視圖:
          注意:在 “設(shè)計(jì)視圖”時(shí)完成的工作:
      添加表/刪除表 ?添加引用字段/刪除引用字段 ?調(diào)整字段順序 ?設(shè)置分組
      設(shè)置過(guò)濾條件 ?設(shè)置引用字段是否輸出 ?設(shè)置視圖其他屬性
          4.使用企業(yè)管理器的刪除視圖:

    (二). 用T-SQL語(yǔ)句創(chuàng)建與管理視圖

          (查看由企業(yè)管理器創(chuàng)建的視圖—“項(xiàng)目信息”其相應(yīng)的T-SQL語(yǔ)句)(“視圖屬性”)
          1. 使用CREATE VIEW創(chuàng)建視圖的語(yǔ)法: 參見(jiàn)教材p130~135
          例子1: 選擇‘員工表’和‘項(xiàng)目表’中的部分字段和記錄創(chuàng)建視圖,并且限制表‘員工表’ 中的記錄只能是部門(mén)為“項(xiàng)目部”的記錄集合,視圖定義為view_part,其程序清單如下:

    CREATE VIEW view_part
    AS
    SELECT 員工表.編號(hào), 員工表.姓名,員工表.性別,
    員工表.所屬部門(mén), 項(xiàng)目表.項(xiàng)目編號(hào), 項(xiàng)目表.名稱
    FROM 項(xiàng)目表 INNER JOIN 員工表 ON 項(xiàng)目表.負(fù)責(zé)人 = 員工表.編號(hào)
    WHERE 員工表.所屬部門(mén)='項(xiàng)目部'

    例子2:定義視圖時(shí)指定別名并加密

    CREATE VIEW 項(xiàng)目信息視圖
    (項(xiàng)目名稱,項(xiàng)目客戶,項(xiàng)目負(fù)責(zé)人,開(kāi)始日期,[計(jì)劃工期(天)])
    with encryption
    AS
    SELECT 項(xiàng)目表.名稱,客戶表.客戶名稱, 員工表.姓名,項(xiàng)目表.開(kāi)始日期,
    DATEDIFF(day,項(xiàng)目表.開(kāi)始日期,項(xiàng)目表.結(jié)束日期)
    FROM 項(xiàng)目表 INNER JOIN 員工表 ON 項(xiàng)目表.負(fù)責(zé)人 = 員工表.編號(hào)
    INNER JOIN 客戶表 ON 項(xiàng)目表.客戶 = 客戶表.客戶編號(hào)
    WHERE 員工表.所屬部門(mén)='項(xiàng)目部'

    使用語(yǔ)句:exec sp_helptext ‘項(xiàng)目信息視圖’顯示消息為:
    “對(duì)象備注已加密。” 

    操作結(jié)果如下圖所示

    例子5-3:使用WITH CHECK OPTION子句
    問(wèn)題提出:
    若創(chuàng)建視圖ygb_view,其程序清單如下:

    CREATE VIEW ygb_view
    AS
    SELECT * FROM 員工表
    WHERE 員工表.性別=‘女’執(zhí)行下列語(yǔ)句,插入新記錄:
    INSERT INTO ygb_view(姓名,性別,工資)
    values(‘李立三’,‘男’,2300)


    插入操作成功,但不合理!
    解決辦法:使用with check option,程序清單如下:

    CREATE VIEW ygb_view
    AS
    SELECT * FROM 員工表 WHERE 員工表.性別=‘女’With check option

    同樣,插入新記錄:
    INSERT INTO ygb_view(姓名,性別,工資) values(‘李立三’,‘男’,2300)
    插入操作將失敗!

    2.使用ALTER VIEW修改視圖 語(yǔ)法:參見(jiàn)教材
    3.刪除視圖DROP VIEW
      使用DROP VIEW命令刪除視圖的語(yǔ)法如下: DROP VIEW 視圖名1 [, ……]
    例: DROP VIEW ygb_view

    七、使用視圖操作表數(shù)據(jù)

    (一)、通過(guò)視圖添加表數(shù)據(jù)

      使用INSERT語(yǔ)句實(shí)現(xiàn)。
      注意:視圖是虛擬表,其本身不存儲(chǔ)數(shù)據(jù)(來(lái)自其引用表), 添加的數(shù)據(jù)是存儲(chǔ)于視圖參照的數(shù)據(jù)表中。

    條件分析:
    1)用戶有向數(shù)據(jù)表插入數(shù)據(jù)的權(quán)限;
    2)視圖只引用表中部分字段,插入數(shù)據(jù)時(shí)只能是明確其應(yīng)用的字段取值;
    3)未引用的字段應(yīng)具備下列條件之一:
      允許空值;設(shè)有默認(rèn)值;是標(biāo)識(shí)字段;數(shù)據(jù)類型是timestamp或uniqueidentifer;
    4)視圖不能包含多個(gè)字段的組合
    5)視圖不能包含使用統(tǒng)計(jì)函數(shù)的結(jié)果;
    6)視圖不能包含DISTINCT或GROUP BY子句;
    7)定義視圖使用WITH CHECK OPTION,則插入數(shù)據(jù)應(yīng)符合相應(yīng)條件;
    8)若視圖引用多個(gè)表,一條INSERT語(yǔ)句只能同一個(gè)基表表中數(shù)據(jù);

    例:
    首先創(chuàng)建了一個(gè)新的視圖:

    CREATE VIEW ygb_view
    AS
    SELECT * FROM 員工表 WHERE 員工表.性別=‘女’ with check option

    然后,通過(guò)執(zhí)行以下語(yǔ)句使用該視圖向基表添加一條新的數(shù)據(jù)記錄:
    INSERT INTO ygb_view(姓名,性別,工資) values(‘李立平’,‘女’,2300)

    (二). 更新數(shù)據(jù)記錄
      使用視圖可以更新基表數(shù)據(jù)記錄(注意使用INSERT時(shí)的限制同樣適用)。
    例子3:
    (1) update 項(xiàng)目_view
      set 項(xiàng)目負(fù)責(zé)人= ‘王大力’ where 項(xiàng)目負(fù)責(zé)人= ‘王立兵’
    (2) update 項(xiàng)目_view
      set 結(jié)束日期= DATEADD(day, 50, 結(jié)束日期) where 客戶名稱=‘CCH公司’

    (三)、刪除數(shù)據(jù)記錄
      利用DELETE語(yǔ)句,使用視圖刪除記錄,可以刪除任何基表中的記錄。
      注意: 必須指定在視圖中定義過(guò)的字段來(lái)刪除記錄;
         視圖引用多個(gè)表時(shí),無(wú)法用DELETE命令刪除數(shù)據(jù)。
    例子4:delete ygb_view where 員工工資<1500

    posted on 2007-11-18 21:39 freefly 閱讀(170) 評(píng)論(0)  編輯  收藏 所屬分類: database

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
    相關(guān)文章:
     
    主站蜘蛛池模板: 亚洲欧洲日产国码一级毛片| 国产精品免费看香蕉| 永久免费无码网站在线观看个| 亚洲精品视频在线播放| 一级毛片在线免费看| 国产精品免费高清在线观看| 亚洲人成色77777在线观看大| 不卡视频免费在线观看| 亚洲人成色77777| 岛国精品一区免费视频在线观看 | 99re6在线精品视频免费播放| 亚洲人色婷婷成人网站在线观看| 波多野结衣在线免费视频| 亚洲精品福利网泷泽萝拉| 免费无码一区二区三区蜜桃大 | 亚洲精品自产拍在线观看动漫| a级毛片在线免费观看| 国产亚洲av片在线观看播放| 99免费精品视频| 亚洲欧美乱色情图片| 国产小视频在线观看免费| 日韩精品免费在线视频| 337p日本欧洲亚洲大胆人人 | 亚洲另类图片另类电影| 毛片免费在线视频| 美国免费高清一级毛片| 国产成人精品久久亚洲高清不卡 | 成人免费777777被爆出| 亚洲av永久无码精品网址| 亚洲人午夜射精精品日韩| 韩国免费一级成人毛片| 在线视频亚洲一区| 亚洲中文久久精品无码1| 啦啦啦手机完整免费高清观看| 特a级免费高清黄色片| 亚洲 欧洲 视频 伦小说| 亚洲а∨天堂久久精品| 午夜影院免费观看| 本免费AV无码专区一区| 黄色a级免费网站| 亚洲男人的天堂在线播放|