什么是将军印:创建、删除和修改视图

来源:百度文库 编辑:偶看新闻 时间:2024/05/08 20:46:45
CREATE VIEW SQL 语句用于定义视图。 SELECT 语句用于指定将在视图中显 示
哪些行与列。
[ 示例 ]-[ 创建视图 1] :
CREATE VIEW NONFICTIONBOOKS AS
SELECT * FROM BOOKS WHERE BOOKTYPE = 'N'
[ 示例 ]-[ 创建视图 2] :
CREATE VIEW MYBOOKVIEW (TITLE,TYPE) AS
SELECT BOOKNAME,BOOKTYPE FROM BOOKS
DROP VIEW SQL 语句用于从数据库中删除视图。如果删除一个视图所基于的
表或另一个视图,那么这个视图依然在数据库中被定义,但变得不起作用。
SYSCAT.VIEWS 的 VALID 列表明视图是有效的( ‘ Y ’ )还是无效的( ‘ X ’ ) 。
即使重新创建基表,无效的视图仍然是无效的;必须也重新创建它。[ 示例 ]-[ 删除视图 ] :
DROP VIEW MYBOOKVIEW
不能修改视图;要更改视图定义,必须删除视图,然后重新创建它。 DB2 提
供的 ALTER VIEW 语句只用于修改引用类型。 在创建一个视图时,可以将它定义为只读视图 或者可更新视图。视图的
SELECT 语句决定视图是只读的还是可更新的。
一般情况下,如果视图中的行可以映射到基表中的行,那么该视图就是可更
新的。例如,就像前面示例中定义的那样,视图 NONFICTIONBOOKS 是可更新的 ,
因为视图中的每一行都是基表中的行。
创建可更新视图的规则很复杂,它们取决于查询的定义。例如,使用 VALUE S 、
DISTINCT 或 JOIN 特性的视图是不可更新的。通过查看 SYSCAT.VIEWS 的
READONLY 列很容易就能确定视图是不是可更新的: Y 表示只读, N 表示非只读 。
先前定义的 NONFICTIONBOOKS 视图只包含 BOOKTYPE 为 N 的行。如果向这
个视图中插入一个 BOOKTYPE 为 F 的行, DB2 将把该行插入到基表 BOOKS 中 。
但是,如果以后从视图中进行选择,通过该视图却看不到新插入的行。如果不 想
允许用户插入视图范围以外的行,那么在定义视图时可以使用检查选项。使用
WITH CHECK OPTION 定义视图会让 DB2 检查使用视图的语句是否满足视图的条
件。[ 示例 ]-[ 视图检查定义 ] :
CREATE VIEW NONFICTIONBOOKS AS
SELECT * FROM BOOKS WHERE BOOKTYPE = 'N'
WITH CHECK OPTION
说明,这个视图仍然限制用户只能看到非小说类的书;另外,它还防止用户
插入 BOOKTYPE 列的值不为 N 的行,并防止把现有行中 BOOKTYPE 列的值更新
为 N 以外的值。例如,下列语句将不再允许使用:
INSERT INTO NONFICTIONBOOKS VALUES (...,'F');
UPDATE NONFICTIONBOOKS SET BOOKTYPE = 'F' WHERE BOOKID = 111