可更新的視圖()
在不久之前視圖僅僅是數據的一個只讀窗口某些RDBMS在某種程度上已經放松了這種限制允許對視圖執行INSERTUPDATE或DELETE操作目前只有OracleMySQLMicrosoft SQL Server和IBM DB對視圖提供了這樣的功能即使在這些數據庫中在視圖成為一個可更新視圖之前也必須滿足一定的條件
最重要的一個限制就是一個可更新視圖只能包含一個表其他的限制包括不允許使用GROUP BY子句和ORDER BY子句不支持DISTINCT關鍵字不能使用聚合函數或子查詢以及不能包含計算列等諸如此類的限制還有很多某些SQL語句還要求一些額外的具體條件例如要對一個視圖執行INSERT語句則必須將所有定義為NOT NULL的列都包含在創建該視圖的SELECT語句中
試一試通過視圖執行INSERTUPDATE或DELETE操作
下面將創建一個允許用戶向數據庫中添加新記錄的視圖但限制只允許更新底層表中的兩個列這個練習將使用Microsoft SQL Server但在其他支持可更新視圖的RDBMS中也能正常運行
() 打開Microsoft SQL Server Management Studio使用Windows身份驗證連接到數據庫
() 單擊位於左上角的New Query按鈕
() 在打開的查詢窗口(中間的窗格)中輸入下面的SQL查詢
CREATE VIEW vwBookPrices
AS SELECT
bk_id
bk_title
bk_price
FROM books;
() 執行下面的查詢只提供BK_ID列的值插入一條新記錄
INSERT INTO vwBookPrices (BK_ID) VALUES ()
( row(s) affected)
() 運行下面的查詢驗證新記錄是否確實插入到了BOOKS表中
SELECT
bk_id
bk_title
bk_price
FROM books;
bk_id bk_title bk_price
NULL NULL
() 運行下面的查詢使用指定的圖書名稱和價格更新剛才新插入的記錄
UPDATE vwBookPrices
SET bk_title= Faust
bk_price =
WHERE bk_id =
( row(s) affected)
() 運行下面的查詢驗證該記錄是否確實插入到了BOOKS表中
SELECT
bk_id
bk_title
bk_price
FROM books
WHERE bk_id = ;
bk_id bk_title bk_price
Faust
() 最後刪除該記錄
DELETE vwBookPrices WHERE bk_id = ;
( row(s) affected)
返回目錄SQL實戰新手入門
編輯推薦
Oracle索引技術
高性能MySQL
數據倉庫與數據挖掘培訓視頻教程
From:http://tw.wingwit.com/Article/program/SQL/201311/16459.html