视图是数据库里的一个对象。视图是一个子查询,或者说就是一张表。视图里的表是虚表。
视图名称一般以vi或v$开头。
–为test_t表创建视图
create view vi_test_t as select id AAAA, no BBBB, t_name CCCC, s_name DDDD, score EEEE from test_t where score > 60;
–查询视图
select * from vi_test_t;
AAAA | BBBB | CCCC | DDDD | EEEE |
2 | 2 | Mary | 李四 | 99 |
3 | 3 | Tom | 王五 | 76 |
。。。以下记录省略
–修改视图,为视图的列添加别名
create or replace view vi_test_t(序号, 学号, 教师名字, 学生名字, 分数) as select id, no, t_name, s_name, score from test_t where score > 60;
//用 OR REPLACE 选项,允许创建视图时同名的视图已经存在,这样旧版本的视图会被替换。
//这意味着视图可以在不被删除、重新创建和再次授予对象权限的情况下修改。
//这里重新定义了别名。
序号 | 学号 | 教师名字 | 学生名字 | 分数 |
2 | 2 | Mary | 李四 | 99 |
3 | 3 | Tom | 王五 | 76 |
。。。以下记录省略
//只有简单视图(数据仅来自一张表),才能操作DML语句(INSERT、UPDATE和DELETE)增删改。
如果视图中包含下面的部分就不能删除行:
– 组函数
– GROUP BY 子句
– DISTINCT 关键字
– 伪列 ROWNUM 关键字
如果视图中包含下面的部分就不能修改数据:
– 组函数
– GROUP BY 子句
– DISTINCT 关键字
– 伪列 ROWNUM 关键字
– 用表达式定义的列
如果视图中包含下面的部分就不能通过视图添加数据:
– 组函数
– GROUP BY 子句
– DISTINCT 关键字
– 伪列 ROWNUM 关键字
– 用表达式定义的列
– 基表中的 NOT NULL 列不在视图中
PS:一般不用视图操作DML语句
视图的作用:
1)简化查询的结构,把子查询定义成视图,在另一个查询里用
2)限制数据访问,屏蔽部分不愿意给客户看到的字段
3)视图建多了,如果原表的表结构改了,会增加维护工作