当前位置:网站首页>Oracle -- 视图与序列

Oracle -- 视图与序列

2022-07-06 22:12:00 攀登程序猿

视图定义

是从一个或者多个数据表中导出的虚表(虚拟表),视图所对应的数据并不真正的存储在数据库中,比如将一个查询的结果定义为视图,则直接查询视图即可

优点:

(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

原网站

版权声明
本文为[攀登程序猿]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_45759288/article/details/125584852