Oracle数据库学习总结_视图与序列




一. 视图

<1> 建立视图

create [or repalce] view
	vie_name[(column_name)[,...n]]
as	
	sub_querry
[with check option [constraint constraint_name] ]
[with read only]

1. 简单视图

create view 
	vw_emp
as 
	select 
		emp_no,
		emp_name,
		emp_salary,
		emp_dep_no,
	from
		emp;

2. 复杂视图

包含函数, 表达式, 分组数据 的 sql 语句

# 基于雇员表emp建立视图, 用于同届输出每个部门的雇员数及平均工资
create view 
	vie_emp_temp( dep_no, emp_cnt, avg_salary ) 

	select 
		dep_no, 
		count( * ),
		round( avg(salary) ) )
	from
		employee;
group by dep_no;
	

3. 连接视图

连接视图由于涉及多个表, 不允许执行 insert 操作.
对于 upadate, delete 操作, 则在满足约束条件的情况下允许执行

create view 
	vie_emp
as
	select 
		emp_no,
		emp_name,
		emp_salary,
		dep_no,
		dep_location
	from
		employee as e,
		department as d
where
	e.dep_no = d.dep_no;

4. 只读视图

不允许任何DML操作

create view
	vie_emp
as 
	select
		emp_no,
		emp_name,
		emp_salary,
		emp_dep_no,
	from
		employee
with read only;

5. check约束

create view
	vie_emp
as
	select 
		emp_no,
		enp_name,
		emp_dep_no,
	from
		employee
	where
		salary > 15000
with check option constraint ck_salay;

# 当对这个视图进行修改插入的时候, 就必须满足工资大于15000这个约束, 不满足会报错




<2> 维护视图


1. 修改视图

视图修改相当于重建

create or replace view 
	vw_emp
as 
	select 
		emp_no,
		emp_name,
		emp_salary,
		emp_dep_no,
	from
		emp;

2. 重新编译视图

alter view
	vie_name
compile;

3. 删除视图

drop view view_name;


二. 序列

create sequence
	sequence_name
[increment by n] 						# 步长, 即单位长度, 省略默认为1
[start with n]							# 初始值, 省略默认为1 
[{maxvalue / minvalue n | nomaxvalue}]	# 最值
[{cycle | nocycle}]						# 是否循环
[{cache n| nocache}]					# 缓冲区大小, 默认为20. 适当的缓冲区可以改善序列性能

<1> 创建, 使用序列

create sequence
	seq_no
increment by 1
start with 1
maxvalue 999999
nocycle;
# 生成序列的当前序列号
select 
	seq_no.currval 
from
	dual;
# 生成序列的下一个序列号
select
	seq_no.nextval
from
	dual;
insert into 
	emp( 
		emp_no, 
		emp_name )
values ( 
	seq_no.nextval,
	'Tester' );
	

<2> 维护序列

但是序列的初始值不能修改

# 修改序列
alter sequence 
	seq_no
increment by 88
maxvalue 999999999
nocycle;
# 删除序列
drop sequence
	seq_no;
# 查看序列
select 
	sequence_name,
	min_value,
	max_value,
	increment_by,
	last_number
from
	user_sequences;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值