第十章-----序列、视图、索引

第十章(序列、视图、索引)

一、序列:sequence

--序列:sequence,产生序列号
--使用属性的默认值创建
--start with:起始序号为1
--increment  by:步长,等差
(--increment by定义序列的差值,默认为1,如果increment by 为负值则序列按照此差值递减)
maxvalue:最大值
--minvlue:最小值
--cycle :循环(定义存放序列的内存块的大小,默认为20),nocycle不循环
--cache:预产生的序号数 ,nocache:不按预产生序号,20;
--创建一个序列
creat sequence squ1; --创建一个序列

create sequence squ2
start with 10    - -开始序号10
increment by 2; --等差2

create sequence squ3
start with 12    - -开始序号12
increment by 3; --等差3
maxvalue 2000
minvalue12
nocache
nocycle
--访问序列
--nextvalu:产生新的序列号返回
--currval:返回当前序号
--nextval应定义在currval之前
select squ3.nextval from dual;
select squ1.nextval from dual;
--修改序列:alter
--注意:序列一旦使用,start with 不能修改,其它属性可以修改
-- 修改只能影响后续的序列号
alter sequence squ3 increment by 2;
alter squ3.currval from dual;
alter squ3.nextval from dual;
--查看序列信息
select * from all_sequence;
select * from dba_sequence;

二、视图:view

视图是虚拟的表,也称为‘存储的查询’。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。数据本质上也是存储在表中。
视图具有以下优点:
1、可以限制用户只能通过视图检索数据。这样就可以对最终用户屏蔽建表时底层的基表。
2、可以将复杂的查询保存为视图。可以对最终用户屏蔽一定的复杂性。
3、限制某个视图只能访问基表中的部分列或者部分行的特定数据。这样可以实现一定的安全性。
4、从多张基表中按一定的业务逻辑抽出用户关心的部分,形成一张虚拟表。
--创建视图——语法结构
create[or replace] [{force|noforce}] view view_name
as
select查询语句
[with read only constraint]
--基于students表和dept表创建的视图
create view view_name
as
select查询语句
create view view_name_info
as
select s.sno,s.sname,s.age,s.ssex,d.dname from students s join dept d s.sno=d.sno;
--重新命名列,修改视图or replace
create or replace view view_students_info(学号,姓名,年龄,性别,院系)
as
select s.sno,s.sname,s.age,s.ssex,d.dname from students s join dept d s.sno=d.sno;
--force:即使基表不存在,也可以创建该视图,但是该视图不能正常使用,当基表创建成功后,视图才能正常使用
--忽视查询错误,强制创建视图
create force view v_t
as
select * from temp;

--创建temp表后视图可用
create table temp(id number(3,0));

select * from temp;
--只读视图with read only,只能查询,不能通过视图修改基表的数据
create or replace view view_students_info(学号,姓名,年龄,性别,院系)
as
select s.sno,s.sname,s.age,s.ssex,d.dname from students s join dept d s.sno=d.sno 
with read only;
--根据视图进行查询
select * from view_name;
select * from view_name_info;
--在创建视图是没有with read only 时,根据视图进行修改
--以视图中列的名称为基准
update view_students_info set 姓名='name' where 学号='2015010001';

update view_students_info set 年龄 = 17 where 学号='2015010001';

select * from view_students_info ;
--with check option:检查修改的数据是否满足创建视图查询的条件
create or replace view view_students_info1(学号,姓名,年龄,性别,院系)
as
select s.sno,s.sname,s.age,s.ssex,d.dname from students s join dept d s.sno=d.sno where s.age>18;

update view_students_info1 set 年龄 = 17 where 学号='2015010001';
--注意,此时可以修该,但在视图中无法查询
select * from view_students_info;


create or replace view view_students_info2(学号,姓名,年龄,性别,院系)
as
select s.sno,s.sname,s.age,s.ssex,d.dname from students s join dept d s.sno=d.sno where s.age>18 with check option;

update view_students_info2 set 年龄 = 17 where 学号='2015010001';
--注意,此时会报错,不允许修改
--删除视图
drop view 视图名;

视图可以DML(数据操纵语言)操作的条件

	1、只能修改一个底层的基表
	2、如果修改违反了基表的约束条件,则无法更新视图
	3、如果视图包含连接操作符、DISTINCT 关键字、集合操作符、聚合函数或 GROUP BY 子句,则将无法更新视图
	4、如果视图包含伪列或表达式,则将无法更新视图
	伪列:伪列的操作类似于表中的列,但是它并不存实际保存在表中。你可以对其进行查询操作,但是你却不能对其进行增加、修改或者是删除,一个伪列也类似于一个没有参数的函数。但是,没有参数的函数通常在结果集中为每一列返回相同的结果,伪列通常为每一列返回不同的值。
	具体参考:https://blog.csdn.net/ziwen00/article/details/11672233?biz_id=102&utm_term=oracle%E4%BC%AA%E5%88%97&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-11672233&spm=1018.2118.3001.4187
	5、在连接视图中不能有Order by、Group by等排序、分组语句。

三、索引:index

--创建索引
create  index 索引名 on table 表名(column1,column2);
--重命名索引
alter index 原索引名 rename to 新索引名;
--重建索引
	一、删除原来的索引,重新建立索引
   二、alter index 索引名 rebuild;
--查看索引
select * from all_indexes where table_name='表名';
--删除索引
drop index 索引名;
--唯一索引
create unique index 索引名 on table 表名(column1,column2);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值