SQL Server视图

1、创建:

用户可以在自己的模式中创建视图,只要具有CREATE VIEW这个系统权限即可。如果希望在其他用户的模式中创建视图,则需要具有CREATE ANY VIEW系统权限。如果一个视图的基表是其他用户模式中的对象,那么当前用户需要具有对这个基表的SELECT权限。

创建视图的命令是CREATE VIEW,这条命令的格式为:

CREATE VIEW 视图名  AS SELECT语句  WITH READ ONLY  WITH CHECK OPTION; 

其中最后两个选项是可选的,其中“WITH READ ONLY”限定对视图只能进行查询操作,不能进行DML操作。“WITH CHECK OPTION”限定DML操作必须满足一定的条件。

例如,下面的语句创建视图view_1,它所代表的操作是查询员工表中部门30的员工姓名、工资和奖金。

SQL> CREATE VIEW view_1 AS       SELECT ename,sal,comm FROM emp       WHERE deptno=30; 


视图view_2所代表的操作是查询部门20和30中工资大于2000元的员工姓名、工资和奖金。创建这个视图的CREATE语句为:

SQL> CREATE VIEW view_2 AS       SELECT ename,sal,comm FROM emp       WHERE (deptno=30 or deptno=20) and sal>2000 

视图被创建之后,可以通过DESC命令查看视图的结构。查看视图结构的方法与查看表的方法相同,查看的结果是列出视图中各列的定义。


视图的结构是在执行CREATE VIEW语句创建视图时确定的,在默认情况下,列的名称与SELECT之后基表的列名相同,数据类型和是否为空也继承了基表中的相应列。如果希望视图中的各列使用不同的名字,那么在创建视图时,在视图的名称之后应该指定各列的名称。

例如,下面的语句重新创建视图view_1,并为这个视图指定了不同的名称。

CREATE VIEW view_1(name,salary,comm1) AS  SELECT ename,sal,comm FROM emp  WHERE deptno=30; 

如果执行DESC命令查看视图view_1的结构,我们将发现视图中各列的名称就是在CREATE VIEW语句中指定的名称,而数据类型和是否为空继承了基表中的对应列。下面是执行DESC命令查看视图view_1结构的结果:

··SQL> DESC view_1;  名称  是否为空?   类型  NAME    NULL    VARCHAR2(10)  SALARY  NULL    NUMBER(7,2)  COMM1   NULL    NUMBER(7,2) 


视图作为一种数据库对象,它的相关信息被存储在数据字典中。与当前用户的视图有关的数据字典是USER_VIEWS,查询这个数据字典,可以获得当前用户的视图的相关信息。例如,需要查询视图VIEW_2中的相关信息,可以执行下面的SELECT语句:

SELECT text FROM user_views WHERE view_name='VIEW_2'; 

在列TEXT中存储的是创建视图时使用的SELECT语句。另外,在数据字典ALL_VIEWS存储的是当前用户可以访问的所有视图的信息,在数据字典DBA_VIEWS存储的是系统中的所有视图的信息,这个数据字典只有DBA可以访问。

2、修改

如果发现视图的定义不合适,可以对其进行修改。实际上视图中的SELECT语句是不能直接修改的,所以修改视图的一种方法是先删除视图,再重新创建,另一种方法是在创建视图的CREATE语句中使用OR REPLACE选项。带OR REPLACE选项的CREATE语句格式为:

CREATE OR REPLACE VIEW 视图名  AS SELECT语句  WITH READ ONLY  WITH CHECK OPTION; 

这样在创建视图时,如果视图不存在,则创建它。如果已经存在一个同名的视图,那么先删除这个视图,然后再根据SELECT语句创建新视图,用这个新视图代替原来的视图。

3、删除

视图在不需要时,可以将其从数据库中删除。删除视图的命令是DROP VIEW。用户可以直接删除自己创建的视图,如果希望删除其他用户创建的视图,则需要具有DROP ANY VIEW这个系统权限。DROP VIEW命令的格式为:

DROP VIEW 视图名; 

例如,要删除视图view_1,可以执行下面的语句:

DROP VIEW view_1; 视图被删除后,相关的信息也被从数据字典中删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值