oracle数据库对象(学习Oracle第六天)

一、学习目标:
1.创建序列
2.创建索引
3.创建视图
4.同义词


二、序列 Sequence
    序列是一个数据库对象,用于生成一序列的不重复的整数。类似于SQL server的自动增长类型。

    查看序列的信息
    可以通过查看user_sequences视图了解序列的信息
    select * from user_sequences order by sequence_name;

    使用序列:
        创建序列之后,序列可以产生一系列的数值。可以通过currval和nextval来访问它们来获取当前值和下一个值。
    语法:
    select 序列名.currval/序列名.nextval from dual; 

    --创建序列
create sequence mysequence
start with 0
increment by 1
MAXVALUE 100000000
MINVALUE 0;

    --查询序列
select * from user_sequences order by sequence_name;  //所有序列按照序列名升序查询

select mysequence.nextval from dual;
select mysequence.currval from dual;

select * from students;
delete from students;
alter table students drop constraint nq_name;
insert into students values(mysequence.nextval,'张鹏','男','1998-10-25','抚州市临川区');  //执行5次
--执行5次之后

    
   

    --修改序列
修改序列可以使用ALTER SEQUENCE语句进行修改。修改有一些限制如下:
    1.初始值不能修改
    2.序列的最小值不能大于当前序列的值
    3.序列的最大值不能小于当前序列的值

    例如:修改mysequence序列的增长值为2
    alter sequence mysequence increment by 2;


    --删除序列
    DROP sequence mysequence;

 



三、索引
  类似于书的目录,加快表的查询速度。给列加索引

--创建B-Tree索引
--给学生表sname字段创建索引
create index i_students_sname on students(sname);

--创建唯一索引  unique index
create unique index i_emp_ename on students(ename);

--创建函数索引
--给emp表ename字段添加函数索引
create index i_func_emp_ename on emp(UPPER(ename));
select * from emp where ename = upper('smith');

--创建位图索引
    在emp表的ename列上创建位图索引
    CREATE BITMAP INDEX i_emp_ename on emp(ename);

--查看用户指定表的索引信息
select index_name , table_name , uniqueness , status 
from user_indexes
where table_name in ('EMP','STUDENTS')
order BY index_name;

--查看某列的索引信息
select index_name , table_name , column_name
from user_ind_columns
where table_name in ('EMP','STUDENTS')
order BY index_name;


--修改索引
    可以使用ALTER INDEX语句修改索引
    例如:修改i_students_sname索引名为i_students_sname_zhi索引
    ALTER index i_students_sname rename to i_students_sname_zhi;

--删除索引
    可以使用DROP INDEX删除索引
    DROP INDEX 索引名;


三、视图
    视图是基于已知的一张表或多张表的查询。

select * from students;
select * from score;
insert into students values(mysequence.nextval,'sss','女','2000-11-05','杭州市下城区');

select s.sid , sname , s.cid , cname , score 
from score s , students stu , course c
where s.sid = stu.sid and s.cid = c.cid;

--视图是虚拟的,物理不存在的,表是物理存在的
--创建视图
create view students_score_view as
select s.sid , sname , s.cid , cname , score 
from score s , students stu , course c
where s.sid = stu.sid and s.cid = c.cid;

--查询视图
select * from students_score_view;

--对视图插入数据
create view students_gender_view as
select * from students where gender = '男';

select * from students_gender_view; 

--测试能不能插入一条性别为女的数据
insert into students_gender_view values(mysequence.nextval,'赵丽颖','女','1996-04-04','南阳市卧龙区');
--可以插入,但在视图中没有这个数据,插入到students表中去了
commit;

--添加 CHECK OPTION约束
--删除之前没加约束的视图
DROP view students_gender_view;
--创建带约束的视图
create view students_view_gender as
select * from students where gender = '男'
with check option constraint students_gender_chk;
--再一次测试能不能插入一条性别为女的数据
insert into students_view_gender values(mysequence.nextval,'凤姐','女','1996-06-04','南阳市卧龙区');
--报错   视图 WITH CHECK OPTION where 子句违规

 

--设置只读的视图 READ ONLY
--删除之前的视图
drop view students_view_gender;
--创建只读视图
create view students_view_gender as
select * from students where gender = '男'
with read only constraint students_gender_readonly;
--测试插入一条数据
insert into students_view_gender values(mysequence.nextval,'凤姐她哥','男','1996-12-14','南阳市卧龙区');
--报错 无法对只读视图执行 DML 操作  42399.0000 - "cannot perform a DML operation on a read-only view"

 


四、同义词

--创建同义词 cmd中登sys去给权限  grant create synonym to scott; 
create SYNONYM svg for students_view_gender;
select * from svg;
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值