可更新的视图()
在不久之前视图仅仅是数据的一个只读窗口某些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
数据仓库与数据挖掘培训视频教程