sql視圖刷新
① sql中如果修改了基本表的數據,視圖也會自動隨之修改嗎
如果改動了基本表,視圖來源於這個基本表,那視圖給呈現的結果也會隨之發生變化。因為視圖是一個虛擬表,其內容有查詢定義。視圖中的數據是由一張或多張表中的數據組成的。
view還是materialized view,如果是前者肯定會修改,因為view只是個sql,查詢的還是基本表,後者需要定製刷新,才會自動修改。
(1)sql視圖刷新擴展閱讀
SQL語言主要是高級的非過程化編程語言,允許用戶在高層數據結構上工作。它不要求用戶指定對數據的存放方法,也不需要用戶了解具體的數據存放方式。
具有完全不同底層結構的不同資料庫系統,可以使用相同的結構化查詢語言作為數據輸入與管理的介面。SQL語言語句可以嵌套,這使他具有極大的靈活性和強大的功能。
② 利用sql語句如何更新視圖
更新視圖有以下三條規則:
(1) 若視圖是基於多個表使用聯接操作而導出的,那麼對這個視圖執行更新操作時,每次只能影響其中的一個表。
(2) 若視圖導出時包含有分組和聚合操作,則不允許對這個視圖執行更新操作。
(3) 若視圖是從一個表經選擇、投影而導出的,並在視圖中包含了表的主鍵字或某個候選鍵,這類視圖稱為『行列子集視圖』。對這類視圖可執行更新操作。
視圖只有滿足下列條件才可更新:
1、select語句在選擇列表中沒有聚合函數,也不包含TOP,GROUP BY,UNION(除非視圖是分區視圖)或DISTINCT子句。聚合函數可以用在FROM子句的子查詢中,只要不修改函數返回的值。
2、select語句的選擇列表中沒有派生列。派生列是由任何非簡單列表達式(使用函數、加法或減法運算符等)所構成的結果集列。
3、select語句中的FROM子句至少引用一個表。select語句不能只包含非表格格式的表達式(即不是從表派生出的表達式)。
4、INSERT,UPDATE和DELETE語句在引用可更新視圖之前,也必須如上述條件指定的那樣滿足某些限制條件。只有當視圖可更新,並且所編寫的UPDATE或INSERT語句只修改視圖的FROM子句引用的一個基表中的數據時,UPDATE和INSERT語句才能引用視圖。
只有當視圖在其FROM子句中只引用一個表時,DELETE語句才能引用可更新的視圖。
③ SQL語言視圖更新
INSERT語句向視圖插入數據,但應該注意的是:插入的數據實際上存放在基表中,而不是視圖中;
updare好象不行,需要用到另一語句(忘了,呵呵)
④ plsql表更新後視圖未更新
plsql表更新後視圖未更新,可能是不匯總或數據被加工過
一般來說,通過視圖進行數據更新(INSERT、UPDATE、DELETE),只要該視圖是單純的SELECT語句定義的視圖即可。也就是說,如果是不匯總或數據被加工過而是直接顯示數據的視圖,一般可以通過該視圖來更新數據。在這種情況下,在資料庫側,將針對視圖的DML語句(INSERT、UPDATE、DELETE)自動轉換成表的DML語句,來更新數據。
但是,對於定義的復雜視圖,DML語句無法在資料庫側轉換成表的DML語句,因此會發生錯誤。這種情況下如果在資料庫側無法轉換成表的DML語句,我們也可以通過開發者准備的程序,轉換成表的DML語句,也可以實現對視圖的DML。那就是「INSTEAD OF 觸發器」
⑤ 在SQL 里哪些視圖可以更新,哪些不可以更新。(要寫500字的論文)希望提供全面一點的~
視圖一般式可以更新的,但前提是不能有聚合函數或分組等。
在這個前提下:
1:簡單視圖
就是由一個表生成出來的視圖,這種情況你更新她就和更新表一樣
2:二次加工出來的簡單視圖
仍然是一個表出來的視圖,但是視圖中存在通過函數或計算二次加工出來的其他欄位。更新的時候只要不更新這些加工出來的欄位也是可以更新的。
3:組合視圖
通過表之間關聯聯合等出來的復雜視圖。這種視圖更新的時候要注意你所更新的列要來自同一個表,也是可以更新的。
4:靜態視圖
這種視圖等同於表可以直接更新,但是更新的數據盡在視圖中反映出來,不反映到原表
5:其他視圖
通過表函數等其他生成的更為復雜的視圖。一般不可更新
⑥ 如何在線修改全刷新的物化視圖的底層SQL
如何在線修改全刷新的物化視圖的底層SQL
當你CREATE OR REPLACE VIEW SOME_VIEW AS SELECT ... 時,如果結構不變,物化視圖及其依賴對象不會失效。但這不能用於快速刷新的物化視圖。
-- 建立測試環境:
CREATE TABLE T (ID NUMBER PRIMARY KEY);
INSERT INTO T VALUES (1);
INSERT INTO T VALUES (2);
⑦ sql中如果修改了基本表的數據,視圖也會自動隨之修改嗎
1、首先在電腦中登錄PL/SQL Developer,如下圖所示。
⑧ sql server2008 更新視圖怎麼更新
在之前視圖的那代碼中添加自己想要的那天列,然後重新執行生成一不就可以了嗎?
例如之前的是:
Create VIEW SHITU1 AS SELECT 工資 from dbo.sheet2$
你可以這樣修改加入列「姓名」後再執行一次:
Create VIEW SHITU1 AS SELECT 姓名, 工資 from dbo.sheet2$
⑨ SQL視圖 更新問題
視圖本身是不保存數據的,每次對視圖查詢,會直接連到表上查詢
但是你這個問題,要根據你的視圖語句來做具體判斷的
比如視圖里有where條件,有group by等聚合函數等的話,原表數據變化了,視圖的數據也有可能不變化。
舉個例子吧:
A表
id type name
1 aa 張三
2 bb 李四
如果視圖是:
create view v_tab
as
select * from a where type = 'aa'
那這樣的話,在a表裡如果插入一條type = 『bb』的數據,視圖的數據就不會有變化
不知道這樣描述樓主清楚沒
⑩ 如何在線修改全刷新的物化視圖的底層SQL
如何在線修改全刷新的物化視圖的底層SQL
物化視圖建立的時候可以定義刷新方式,一般有: refresh fast 和 refresh complete之分,前者是只更新主表中變化的記錄(主表必須建立materialized view log),而後者是把MV裡面的數據全部更新。此外,更新方式還可以有:on demand, on commit, on force之分. on commit是及時更新。其實用戶創建materialized view的時候可以指定更新頻率,給你個例子
CREATE Materialized View mv_terminal
REFRESH FAST
NEXT SYSDATE + 30/(24*60)
AS
SELECT * FROM ........
這個MV每30分鍾刷新一次,只刷新改變的數據