當前位置:首頁 » 數據倉庫 » 資料庫數據更新和視圖定義
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

資料庫數據更新和視圖定義

發布時間: 2022-04-20 23:28:44

資料庫視圖是什麼,有什麼用,怎麼用

你首先要理解什麼是查詢結果集
查詢時實現資料庫操作的最主要方法,盡管從查詢結果集看到的數據集合與打開的數據表看到的數據集合一樣,但實質是完全不同的:
*數據表是資料庫中存放數據的實體對象,在數據表中看到的是數據的靜態物理集合,是實際的數據源表。
*查詢只是針對數據源的操作命令(程序),在查詢結果中看到的是數據的動態邏輯集合,是執行命令對數據表操作的結果,十一哥虛擬的數據表。
視圖的概念
我們經常使用SELECT語句,尤其是比較復雜的查詢語句,如果每次使用都要重復地輸入代碼是很麻煩的,如果將該語句保存為一個對象,每次使用時不需要輸入代碼,只給出對象的名字就能方便地使用,簡化查詢操作。這個對象就是視圖。
視圖實際上就是給查詢語句指定一個名字,將查詢語句定義為一個獨立的對象保存。
既然視圖是由SELECT查詢語句構成的,那麼使用視圖就可以直接得到SELECT語句的查詢結果集,所以我們就可以這樣為視圖下一個定義:
視圖:就是基於一個或多個數據表的動態數據集合,是一個邏輯上的虛擬數據表。
另一方面,視圖又具有更強的功能:使用SELECT語句只能在結果集——動態邏輯虛擬表中查看數據,而使用視圖不但可以查看數據,而且可以作為sql語句的數據源,並且可以直接在視圖中對數據表進行編輯修改刪除——更新數據表中的數據。

② 在sql資料庫里的視圖是什麼意思,怎麼理解

視圖為原始資料庫數據的一種變換,是查看錶中數據的另外一種方式。可以將視圖看成是一個移動的窗口,通過它可以看到感興趣的數據。視圖為從一個或多個實際表中獲得的,這些表的數據存放在資料庫中。那些用於產生視圖的表叫做該視圖的基表。一個視圖也可以從另一個視圖中產生。

視圖的定義存在資料庫中,與此定義相關的數據並沒有再存一份於資料庫中。通過視圖看到的數據存放在基表中。



(2)資料庫數據更新和視圖定義擴展閱讀

視圖有很多優點,主要表現在:

1、視點集中

使用戶只關心它感興趣的某些特定數據和他們所負責的特定任務。這樣通過只允許用戶看到視圖中所定義的數據而不是視圖引用表中的數據而提高了數據的安全性。

2、簡化操作

視圖大大簡化了用戶對數據的操作。因為在定義視圖時,若視圖本身就是一個復雜查詢的結果集,這樣在每一次執行相同的查詢時,不必重新寫這些復雜的查詢語句,只要一條簡單的查詢視圖語句即可。可見視圖向用戶隱藏了表與表之間的復雜的連接操作。

3、定製數據

視圖能夠實現讓不同的用戶以不同的方式看到不同或相同的數據集。因此,當有許多不同水平的用戶共用同一資料庫時,這顯得極為重要。

4、合並分割數據

在有些情況下,由於表中數據量太大,故在表的設計時常將表進行水平分割或垂直分割,但表的結構的變化卻對應用程序產生不良的影響。如果使用視圖就可以重新保持原有的結構關系,從而使外模式保持不變,原有的應用程序仍可以通過視圖來重載數據。

5、安全性

視圖可以作為一種安全機制。通過視圖用戶只能查看和修改他們所能看到的數據。其它資料庫或表既不可見也不可以訪問。如果某一用戶想要訪問視圖的結果集,必須授予其訪問許可權。視圖所引用表的訪問許可權與視圖許可權的設置互不影響。

③ 在資料庫中定義視圖的作用何在

簡單講,可以把視圖當做一個「虛擬表」,當我們需要這些信息時,就不需要重新寫腳本去查詢信息,直接使用
select
*
from
view_name
,就可以查詢到之前寫的關聯查詢信息我們可以把幾張表關聯查詢放到一張視圖里,同時,我們也可以對視圖進行
update/delete操作,系統將自動update/delete對應的表注意:
在創建視圖時,需要注意列名稱不可以為空、不可以重復...

④ 資料庫中表與視圖有什麼聯系與區別

區別
1、視圖是已經編譯好的sql語句,而表不是;
2、視圖沒有實際的物理記錄,而表有;
3、表是內容,視圖是窗口;
4、表佔用物理空間而視圖不佔用物理空間,視圖只是邏輯概念的存在,表可以及時對它進行修改,但視圖只能用創建的語句來修改;
5、表是內模式,試圖是外模式;
6、視圖是查看數據表的一種方法,可以查詢數據表中某些欄位構成的數據,只是一些SQL語句的集合,從安全的角度說,視圖可以不給用戶接觸數據表,從而不知道表結構;
7、表屬於全局模式中的表,是實表,視圖屬於局部模式的表,是虛表;
8、視圖的建立和刪除隻影響視圖本身,不影響對應的基本表;
9、不能對視圖進行update或者insert into操作。

聯系
1、視圖(view)是在基本表之上建立的表,它的結構(即所定義的列)和內容(即所有數據行)都來自基本表,它依據基本表存在而存在;
2、一個視圖可以對應一個基本表,也可以對應多個基本表;
3、視圖是基本表的抽象和在邏輯意義上建立的新關系。
總結:
視圖是一個子查詢,性能肯定會比直接查詢要低(盡管sql內部有優化),所以使用視圖時有一個必須要注意的,就是不要嵌套使用查詢,尤其是復雜查詢。
視圖有什麼用
1、當一個查詢需要頻頻的作為子查詢使用時,視圖可以簡化代碼,直接調用而不是每次都去重復寫這個東西。
2、系統的資料庫管理員需要給他人提供一張表的某兩列數據,而不希望他可以看到其他任何數據,這時可以建一個只有這兩列數據的視圖,然後把視圖公布給他。
性能損失解決方案
對視圖的查詢語句進行優化。
通常來說直接查詢和查詢視圖是沒有什麼區別的(sql 本身會進行優化),除非是視圖嵌套了視圖,或者子查詢很復雜要計算。
特別說明:
每次SELECT視圖的時候,視圖都會重新計算創建它的規則(sql演算法),如果演算法復雜,數據量大,就會比較慢,那樣每次就很慢了。
而且,表的索引對於視圖view來說是無效的,它是全表掃描的。

⑤ 資料庫中的視圖有什麼用,我們為什麼要用視圖

用來進行數據展示和分析。使用視圖可以定製用戶數據,聚焦特定的數據。

視圖是原始資料庫數據的一種變換,是查看錶中數據的另外一種方式。可以將視圖看成是一個移動的窗口,通過它可以看到感興趣的數據。

視圖是從一個或多個實際表中獲得的,這些表的數據存放在資料庫中。那些用於產生視圖的表叫做該視圖的基表。一個視圖也可以從另一個視圖中產生。

視圖的定義存在資料庫中,與此定義相關的數據並沒有再存一份於資料庫中。通過視圖看到的數據存放在基表中。

視圖可以在以下幾個方面使程序與數據獨立:

如果應用建立在資料庫表上,當資料庫表發生變化時,可以在表上建立視圖,通過視圖屏蔽表的變化,從而應用程序可以不動。

如果應用建立在資料庫表上,當應用發生變化時,可以在表上建立視圖,通過視圖屏蔽應用的變化,從而使資料庫表不動。

如果應用建立在視圖上,當資料庫表發生變化時,可以在表上修改視圖,通過視圖屏蔽表的變化,從而應用程序可以不動。

如果應用建立在視圖上,當應用發生變化時,可以在表上修改視圖,通過視圖屏蔽應用的變化,從而資料庫可以不動。

⑥ 資料庫視圖·問題

可修改視圖是指可以使用插入、更新和刪除操作來改變基礎表中數據的視圖。對可修改表做的任何變化都將明確地傳遞到基礎表。視圖的插入、更新和刪除語法與表的相同,參見第10章。

不可修改(只讀)視圖是不支持插入、更新和刪除操作的視圖,因為對數據的改動可能是含糊不清的。要改變出現在只讀視圖的數據,必須直接修改基礎表(或通過其他可修改視圖)。

可修改視圖的每一行都和基礎表的一行相關聯。如果視圖的SELECT語句使用了GROUP BY、HAVING、DISTINCT或聚合函數等,視圖就成為不可更新的。

SQL-92規定可更新視圖只能定義在一張表上,這樣過於嚴格但很安全。SQL:1999放寬了限制,因為存在樣式繁多的可更新視圖。隨著標準的發布,DBMS供應商擴展了可更新視圖。單一表視圖總是可更新的。DBMS檢查基礎表的聯結和多表視圖的引用完整性約束來決定視圖是否可更新。以下這些類型的查詢可以定義為可更新的視圖。

l 一對一內聯結

l 一對一外聯結

l 一對多內聯結

l 一對多外聯結

l 多對多聯結

l UNION和EXCEPT查詢

===========
具體參見http://book.csdn.net/bookfiles/1198/100119835646.shtml

⑦ 試述關系資料庫系統中視圖的定義,引進view的概念有什麼意義

試述關系資料庫系統中視圖(VIEW)的定義,引進VIEW的概念有什麼優點。
答案 視圖是從一個或幾個基本表導出的表。視圖本身不獨立存儲在資料庫中,是一個虛表。即資料庫中只存放視圖的定義而不存放視圖對應的數據,這些數據仍存放在導出視圖的基本表中。視圖在概念上與基本表等同,用戶可以如同基本表那樣使用視圖,可以在視圖上再定義視圖。引進VIEW的優點有: (1)視圖能夠簡化用戶的操作。 (2)視圖使用戶能以多種角度看待同一數據。 (3)視圖對重構資料庫提供了一定程度的邏輯獨立性。 (4)視圖能夠對機密數據提供安全保護。

⑧ 資料庫如何創建視圖

視圖是一個虛擬表,其內容由查詢定義。同真實的表一樣,視圖包含一系列帶有名稱的列和行數據。但是,視圖並不在資料庫中以存儲的數據值集形式存在。行和列數據來自由定義視圖的查詢所引用的表,並且在引用視圖時動態生成。
對其中所引用的基礎表來說,視圖的作用類似於篩選。定義視圖的篩選可以來自當前或其它資料庫的一個或多個表,或者其它視圖。通過視圖進行查詢沒有任何限制,通過它們進行數據修改時的限制也很少。
視圖是存儲在資料庫中的查詢的SQL 語句,它主要出於兩種原因:安全原因, 視圖可以隱藏一些數據,如:社會保險基金錶,可以用視圖只顯示姓名,地址,而不顯示社會保險號和工資數等,另一原因是可使復雜的查詢易於理解和使用。這個視圖就像一個「窗口」,從中只能看到你想看的數據列。這意味著你可以在這個視圖上使用SELECT *,而你看到的將是你在視圖定義里給出的那些數據列:

既然視圖的定義是基於基本表的,哪為什麼還要定義視圖呢?這是因為合理地使用視圖能夠帶來許多好處:
1、 視圖能簡化用戶操作
視圖機制使用戶可以將注意力集中在所關心地數據上。如果這些數據不是直接來自基本表,則可以通過定義視圖,使資料庫看起來結構簡單、清晰,並且可以簡化用戶的的數據查詢操作。例如,那些定義了若干張表連接的視圖,就將表與表之間的連接操作對用戶隱藏起來了。換句話說,用戶所作的只是對一個虛表的簡單查詢,而這個虛表是怎樣得來的,用戶無需了解。
2、 視圖使用戶能以多種角度看待同一數據
視圖機制能使不同的用戶以不同的方式看待同一數據,當許多不同種類的用戶共享同一個資料庫時,這種靈活性是非常必要的。
3、 視圖對重構資料庫提供了一定程度的邏輯獨立性
數據的物理獨立性是指用戶的應用程序不依賴於資料庫的物理結構。數據的邏輯獨立性是指當資料庫重構造時,如增加新的關系或對原有的關系增加新的欄位,用戶的應用程序不會受影響。層次資料庫和網狀資料庫一般能較好地支持數據的物理獨立性,而對於邏輯獨立性則不能完全的支持。
在關許資料庫中,資料庫的重構造往往是不可避免的。重構資料庫最常見的是將一個基本表「垂直」地分成多個基本表。例如:將學生關系Student(Sno,Sname,Ssex,Sage,Sdept),
分為SX(Sno,Sname,Sage)和SY(Sno,Ssex,Sdept)兩個關系。這時原表Student為SX表和SY表自然連接的結果。如果建立一個視圖Student:

[sql]view plain

  • CREATEVIEWStudent(Sno,Sname,Ssex,Sage,Sdept)ASSELECTSX.Sno,SX.Sname,SY.Ssex,SX.Sage,SY.SdeptFROMSX,SYWHERESX.Sno=SY.Sno;

  • 這樣盡管資料庫的邏輯結構改變了(變為SX和SY兩個表了),但應用程序不必修改,因為新建立的視圖定義為用戶原來的關系,使用戶的外模式保持不變,用戶的應用程序通過視圖仍然能夠查找數據。
    當然,視圖只能在一定程度上提供數據的邏輯獨立,比如由於視圖的更新是有條件的,因此應用程序中修改數據的語句可能仍會因為基本表構造的改變而改變。
    4、視圖能夠對機密數據提供安全保護
    有了視圖機制,就可以在設計資料庫應用系統時,對不同的用戶定義不同的視圖,使機密數據不出現在不應該看到這些數據的用戶視圖上。這樣視圖機制就自動提供了對機密數據的安全保護功能。例如,Student表涉及全校15個院系學生數據,可以在其上定義15個視圖,每個視圖只包含一個院系的學生數據,並只允許每個院系的主任查詢和修改本原系學生視圖。
    5、適當的利用視圖可以更清晰地表達查詢
    例如經常需要執行這樣的查詢「對每個學生找出他獲得最高成績的課程號」。可以先定義一個視圖,求出每個同學獲得的最高成績:

    [sql]view plain

  • CREATEVIEWVMGRADE

  • AS

  • SELECTSno,MAX(Grade)Mgrade

  • FROMSC

  • GROUPBYSno

  • 然後用如下的查詢語句完成查詢:

    [sql]view plain

  • SELECTSC.Sno,CnoFROMSC,VMGRADEWHERESC.Sno=VMGRADE.SnoANDSC.Grade=VMGRADE.Mgrade;

  • 二、數據准備

    1、員工表

    [sql]view plain

  • CREATETABLEt_employee(

  • IDINTPRIMARYKEYAUTO_INCREMENT,

  • NAMECHAR(30)NOTNULL,

  • SEXCHAR(2)NOTNULL,

  • AGEINTNOTNULL,

  • DEPARTMENTCHAR(10)NOTNULL,

  • SALARYINTNOTNULL,

  • HOMECHAR(30),

  • MARRYCHAR(2)NOTNULLDEFAULT'否',

  • HOBBYCHAR(30)

  • );


  • 插入數據:

    [sql]view plain

  • INSERTINTOlearning.t_employee(ID,NAME,SEX,AGE,DEPARTMENT,SALARY,HOME,MARRY,HOBBY)VALUES(NULL,'小紅','女',20,'人事部','4000','廣東','否','網球');

  • INSERTINTOlearning.t_employee(ID,NAME,SEX,AGE,DEPARTMENT,SALARY,HOME,MARRY,HOBBY)VALUES(NULL,'明日','女',21,'人事部','9000','北京','否','網球');

  • INSERTINTOlearning.t_employee(ID,NAME,SEX,AGE,DEPARTMENT,SALARY,HOME,MARRY,HOBBY)VALUES(NULL,'天天','男',22,'研發部','8000','上海','否','音樂');

  • INSERTINTOlearning.t_employee(ID,NAME,SEX,AGE,DEPARTMENT,SALARY,HOME,MARRY,HOBBY)VALUES(NULL,'大大','女',23,'研發部','9000','重慶','否','無');

  • INSERTINTOlearning.t_employee(ID,NAME,SEX,AGE,DEPARTMENT,SALARY,HOME,MARRY,HOBBY)VALUES(NULL,'王下','女',24,'研發部','9000','四川','是','足球');

  • INSERTINTOlearning.t_employee(ID,NAME,SEX,AGE,DEPARTMENT,SALARY,HOME,MARRY,HOBBY)VALUES(NULL,'無名','男',25,'銷售部','6000','福建','否','游戲');

  • INSERTINTOlearning.t_employee(ID,NAME,SEX,AGE,DEPARTMENT,SALARY,HOME,MARRY,HOBBY)VALUES(NULL,'不知道','女',26,'銷售部','5000','山西','否','籃球');

  • 插入的結果:


    結果顯示插入失敗
    對於with check option用法,總結如下:
    通過有with check option選項的視圖操作基表(只是面對單表,對連接多表的視圖正在尋找答案),有以下結論: 插入後的數據,通過視圖能夠查詢出來就符合WITH CHECK OPTION 否則就不符合;
    首先視圖只操作它可以查詢出來的數據,對於它查詢不出的數據,即使基表有,也不可以通過視圖來操作。
    1.對於update,有with check option,要保證update後,數據要被視圖查詢出來
    2.對於delete,有無with check option都一樣
    4.對於insert,有with check option,要保證insert後,數據要被視圖查詢出來
    對於沒有where 子句的視圖,使用with check option是多餘的

    7、刪除視圖

    [sql]view plain

  • DROPVIEWIFEXISTS視圖名

⑨ 什麼是資料庫視圖

聯系:視圖(view)是在基本表之上建立的表,它的結構(即所定義的列)和內容(即所有數據行)都來自基本表,它依據基本表存在而存在。一個視圖可以對應一個基本表,也可以對應多個基本表。視圖是基本表的抽象和在邏輯意義上建立的新關系
區別:1、視圖是已經編譯好的sql語句。而表不是
2、視圖沒有實際的物理記錄。而表有。
3、表是內容,視圖是窗口
4、表只用物理空間而視圖不佔用物理空間,視圖只是邏輯概念的存在,表可以及時四對它進行修改,但視圖只能有創建的語句來修改
5、表是內模式,視圖是外模式
6、視圖是查看數據表的一種方法,可以查詢數據表中某些欄位構成的數據,只是一些sql語句的集合。從安全的角度說,視圖可以不給用戶接觸數據表,從而不知道表結構。
7、表屬於全局模式中的表,是實表;視圖屬於局部模式的表,是虛表。
8、視圖的建立和刪除隻影響視圖本身,不影響對應的基本表。