首页 热点资讯 义务教育 高等教育 出国留学 考研考公
您的当前位置:首页正文

创建、删除和修改视图

2022-10-13 来源:华拓网
创建、删除和修改视图

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

因篇幅问题不能全部显示,请点此查看更多更全内容