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好象不行,需要用到另一語句(忘了,呵呵)
『叄』 在SQL 里哪些視圖可以更新,哪些不可以更新。(要寫500字的論文)希望提供全面一點的~
視圖一般式可以更新的,但前提是不能有聚合函數或分組等。
在這個前提下:
1:簡單視圖
就是由一個表生成出來的視圖,這種情況你更新她就和更新表一樣
2:二次加工出來的簡單視圖
仍然是一個表出來的視圖,但是視圖中存在通過函數或計算二次加工出來的其他欄位。更新的時候只要不更新這些加工出來的欄位也是可以更新的。
3:組合視圖
通過表之間關聯聯合等出來的復雜視圖。這種視圖更新的時候要注意你所更新的列要來自同一個表,也是可以更新的。
4:靜態視圖
這種視圖等同於表可以直接更新,但是更新的數據盡在視圖中反映出來,不反映到原表
5:其他視圖
通過表函數等其他生成的更為復雜的視圖。一般不可更新
『肆』 plsql表更新後視圖未更新
plsql表更新後視圖未更新,可能是不匯總或數據被加工過
一般來說,通過視圖進行數據更新(INSERT、UPDATE、DELETE),只要該視圖是單純的SELECT語句定義的視圖即可。也就是說,如果是不匯總或數據被加工過而是直接顯示數據的視圖,一般可以通過該視圖來更新數據。在這種情況下,在資料庫側,將針對視圖的DML語句(INSERT、UPDATE、DELETE)自動轉換成表的DML語句,來更新數據。
但是,對於定義的復雜視圖,DML語句無法在資料庫側轉換成表的DML語句,因此會發生錯誤。這種情況下如果在資料庫側無法轉換成表的DML語句,我們也可以通過開發者准備的程序,轉換成表的DML語句,也可以實現對視圖的DML。那就是「INSTEAD OF 觸發器」
『伍』 SQL中視圖的創建。修改,刪除
1、創建視圖
CREATE [OR REPLACE] VIEW 視圖名(列1,列2...)
AS SELECT (列1,列2...)
FROM ...;
[WITH [CASCADED|LOCAL] CHECK OPTION]
(5)sql更新視圖擴展閱讀:
SQL語言基本上獨立於資料庫本身、使用的機器、網路、操作系統,基於SQL的DBMS產品可以運行在從個人機、工作站到基於區域網、小型機和大型機的各種計算機系統上,具有良好的可移植性。
可以看出標准化的工作是很有意義的。早在1987年就有些有識之士預測SQL的標准化是「一場革命」,是「關系資料庫管理系統的轉折點」。
資料庫和各種產品都使用SQL作為共同的數據存取語言和標準的介面,使不同資料庫系統之間的互操作有了共同的基礎,進而實現異構機、各種操作環境的共享與移植。
參考資料:網路-SQL
『陸』 SQL中視圖的創建。修改,刪除
創建視圖
CREATE [OR REPLACE] VIEW 視圖名(列1,列2...)
AS SELECT (列1,列2...)
FROM ;
[WITH [CASCADED|LOCAL] CHECK OPTION]
修改視圖
CREATE OR REPLACE VIEW 視圖名 AS SELECT [ ] FROM [ ];
[WITH [CASCADED|LOCAL] CHECK OPTION]
刪除視圖
drop view 視圖名稱
(6)sql更新視圖擴展閱讀:
查看視圖
show tables;
desc 視圖名
查看視圖定義
show create view 視圖名稱G
通過視圖變更數據
insert into 視圖名
update 視圖名
[WITH [CASCADED|LOCAL] CHECK OPTION] 決定了是否允許更新數據記錄不再滿足視圖的條件。
local只要滿足本視圖的條件就可以更新
cascaded則必須滿足所有針對該視圖的所有視圖的條件才可以更新,默認是cascaded。
為了防止通過視圖修改導致數據無故丟失,建議加上WITH CHECK OPTION
參考資料來源:網路-SQL語句
『柒』 sql中修改了基本表的數據視圖也會自動隨之修改嗎
本期我們用 MySQL 提供的 DBUG 工具來研究 MySQL 的 SQL 處理流程。
起手先造個實例
本次實驗中,我們藉助了 MySQL 的 DBUG 包,來讓 MySQL 將處理過程暴露出來。MySQL 中類似的技術還有不少,比如 performance_schema,OPTIMIZER_TRACE 等等。
這些技術將 MySQL 的不同方向的信息暴露出來,方便大家理解其中機制。