查看序列的信息
可以通过查看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次之后
例如:修改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;