是从一个或者多个数据表中导出的虚表(虚拟表),视图所对应的数据并不真正的存储在数据库中,比如将一个查询的结果定义为视图,则直接查询视图即可
优点:
(1)简化数据的操作:视图可以简化用户处理数据的方式
(2)着重与特定数据:不必要的数据或敏感数据可以不出现在视图中
(3)安全机制,不同的用户对数据访问权限不一样
(4)提供向后监控性,表改变,视图可以不变
特点:
(1)视图不会实际存储,当视图允许修改时,修改视图中的数据,则表中的数据也被修改
(2)只读视图不允许修改数据
(3)带约束的视图
(4)多表关联也可以修改数据,基表的数据会跟随修改
- create VIEW classstudent AS SELECT * FROM TBL_STUDENTS
-
- // or replace是视图存在时,替换成新的,with check option是带检查约束的视图
- create OR REPLACE VIEW classstudent AS SELECT * FROM TBL_STUDENTS WITH CHECK OPTION
-
- // 创建只读视图
- create OR REPLACE VIEW classstudent AS SELECT * FROM TBL_STUDENTS WITH READ ONLY
-
- // 强制视图,即表不存在时创建的视图,用于动态生成表的场景
- CREATE force VIEW view_test as SELECT * from tbl_test

- // 复杂视图 多表查询,允许修改数据,会键保留表
- CREATE VIEW view_student_class AS
- SELECT * FROM TBL_STUDENTS JOIN TBL_CLASSES ON TBL_STUDENTS.STU_CID = TBL_CLASSES.CLASS_ID
-
- // 聚合视图,聚合函数必须有列名
- CREATE VIEW view_student as
- SELECT COUNT(*) as count,STU_AGE as age FROM TBL_STUDENTS GROUP BY STU_AGE
注:
(1)键保留表,对于可更新的视图,在视图中的行和基表中的行之间必须具有一对一的关系,因为这样才能够反向映射到原基础表
(2)聚合函数做视图必须有列名
(3)聚合函数的视图无法修改
物化视图
物化视图是将查询的结果建立副本,占用存储空间,查询效率会高,但是会占用空间,未解决权限问题,后续学习。
更新方式:
COMPLETE 完全更新
FAST 增量更新,根据基表的更新日志,判断视图是否需要更新
ON COMMIT是在基表变化时刷新物化视图
ON COMMON是手动刷新
BUILD IMMEDIATE 创建视图时生成数据
ORA-01031: insufficient privileges

创建一系列数字,mysql的主键自增是直接写的,oracle是需要创建序列的
- --创建简单序列
- CREATE sequence seq1;
-
- --查询序列的下一个值,执行一次递增一个
- SELECT seq1.NEXTval from dual;
-
- --查询序列的当前值
- select seq1.currval from dual;

- CREATE sequence seq_withMax
- maxvalue 20; --创建带有最大值的
-
- SELECT seq_withMax.nextval FROM dual; -- 从一开始,每次递增1,最大到20
-
-
- -- 跳跃的序列
- CREATE sequence seq3
- INCREMENT BY 2 -- 默认是1
- START WITH 1000 --递增默认是MaxValue,递减是minvalue
- maxvalue 1002
- minvalue 100
- cycle --是否循环 nocycle
- cache 10; -- 每次放到内存中10个值,默认使用cache 20,不使用cache时配置为nocache,磁盘中保存到10了,缓存到20了,此时重启服务会从21开始,造成断号,有缓存必须小于一次的循环,即cache默认20*INCREMENT by = 200个,得比cache是10,小于200
-
-
- select seq3.nextval from dual; -- 从1000开始,每次递增2,到1002后,重新从100开始
-
-
- CREATE sequence seq4
- INCREMENT BY -2
- START WITH 1000
- maxvalue 1001;
-
- SELECT seq4.nextval FROM dual; -- 从1000开始,每次递减2
alter sequenct可以修改序列,不能修改start with