专栏名称: 张帷杰
目录
相关文章推荐
51好读  ›  专栏  ›  张帷杰

Oracle—视图、序列、索引、同义词

张帷杰  · CSDN  ·  · 2019-12-10 10:17

正文

视图

创建简单视图

创建一个包含员工号、员工名、工资和部门号的员工基本信息视图

create or replace view emp_base_info_view
as
select empno,ename,sal,deptno from emp;
  • 1
  • 2
  • 3

创建一个查询部门编号为20的视图:

SQL>connect scott/1qaz2wsx
已连接
SQL>create or replace view emp_view as
select empno.enmae,job,deptno
from emp
where deptno=20;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

创建一个包含工资大于2000的员工信息的视图 :(复杂视图、只读)

create view  emp_sal_view 
as
select empno,ename,sal*12 salary from emp
where sal>2000  with check option;

  • 1
  • 2
  • 3
  • 4
  • 5

修改视图

可以采用create or replace view 语句修改视图,实质是删除原视图并重建该视图,但是会保留该视图上授予的各种权限

修改视图create view emp_dept_view,添加员工工资信息:

create or replace view  emp_dept_view
as
select T empno,ename,sal,dname 
from emp,dept where emp.deptno=dept.deptno;
  • 1
  • 2
  • 3
  • 4

删除视图

drop view view_name;
  • 1

序列

  1. 序列用于产生惟一序号的数据库对象,用于为多个数据库用户依次生成不重复的连续整数。
  2. 通常使用序列自动生成表中的主键值。
  3. 序列产生的数字最大长度可达到38位十进制数。
  4. 序列不占用实际的存储空间,在数据字典中只存储序列的定义描述。

创建序列

CREATE SEQUENCE sequence
[INCREMENT BY n]   
[START WITH n]    
[MAXVALUE n | NOMAXVALUE]  
[MINVALUE n | NOMINVALUE]  
[CYCLE | NOCYCLE]         
[CACHE n | NOCACHE];
//参数说明
INCREMENT BY:设置相邻两个元素之间的差值,即步长,默认值为1START WITH:设置序列初始值,默认值为1;
MAXVALUE:设置序列最大值
NO MAXVALUE:设置默认情况下,递增序列的最大值为1027,递减序列的最大值为-1; 
MINVALUE:设置序列最小值;
NOMINVALUE:设置默认情况下,递增序列的最小值为1, 递减序列的最小值为-1026CYCLE|NOCYCLE:指定当序列达到其最大值或最小值后,是否循环生成值,NOCYCLE 是默认选项; 
CACHE|NOCACHE:设置是否在缓存中预先分配一定数量的数据值,以提高获取序列值的速度,默认为缓存20个值。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

实列:

create sequence stud_sequence
increment by 1 start with 100
maxvalue 99999
start with 9000
increment by 100
cache 50;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

使用序列:

在scott用户模式下,使用序列empno列会使用序列empno_seq为emp表的新纪录提供员工编号:

insert into emp(empno,enmae,deptno)
value(empno_seq.nextval,'东方',20);
  • 1
  • 2

查询当前序列号:

select empno_seq_currval from dual;

CURRVAL 
---------
9000
  • 1
  • 2
  • 3
  • 4
  • 5

修改序列

alter SEQUENCE stud_sequence 
INCREMENT by 10  
MAXVALUE 10000  cycle  CACHE 20; 
  • 1
  • 2
  • 3

同义词

同义词概述:

同义词是数据库中表、索引、视图或其他模式对象的一个别名。利用同义词,一方面为数据库对象提供一定的安全性保证,例如可以隐藏对象的实际名称和所有者信息,或隐藏分布式数据库中远程对象的位置信息;另一个方面是简化对象访问。此外,当数据库对象改变时,只需要修改同义词而不需要修改应用程序。

同义词分为私有同义词和公有同义词两种。私有同义词只能被创建它的用户所拥有,该用户可以控制其他用户是否有权使用该同义词;公有同义词被用户组PUBLIC拥有,数据库所有用户都可以使用公有同义词。

创建同义词:
语法

CREATE [PUBLIC] SYNONYM synonym_name  
FOR object_name;
  • 1
  • 2

示例

CREATE PUBLIC SYNONYM scottemp FOR scott.emp;
  • 1

利用同义词可以实现对数据库对象的操作

UPDATE scottemp SET ename='SFD'
WHERE empno=7884; 
  • 1
  • 2

索引

概念:
索引是为了加速对表中元组(记录)的检索而创建的一种分散存储结构;
是对表而建立的,由除存放表的数据页面以外的索引页面组成,独立于被索引的表(可以拥有它自己的存储空间);

索引使用原则:
在这里插入图片描述 创建索引:
在这里插入图片描述 创建非惟一性索引到employee表的ename列:

SQL> CREATE INDEX employee_ename ON employee(ename)
     TABLESPACE users 
     STORAGE (INITIAL 20K NEXT 20k PCTINCREASE 75); 
  • 1
  • 2
  • 3

创建惟一性索引到department表的dname列:

SQL> CREATE UNIQUE INDEX deptartment_index
     ON department(dname); 
  • 1
  • 2

创建位图索引到student表的sex列:

`SQL> CREATE BITMAP INDEX student_sex ON student(sex`);
  • 1

创建反序索引到player表的sage列:

SQL> CREATE INDEX player_sage ON player(sage) REVERSE; 
  • 1

定义约束时创建索引:

SQL> CREATE TABLE new_employee(
     empno NUMBER(5) PRIMARY KEY
           USING INDEX TABLESPACE users PCTFREE 0,
     ename VARCHAR2(20)
     ); 
  • 1
  • 2
  • 3
  • 4
  • 5

索引重命名:

SQL> ALTER INDEX employee_ename RENAME
     TO employee_new_ename;
  • 1
  • 2

删除索引:

drop index index_name;
  • 1
推荐文章
算法与数学之美  ·  机器学习中导数最优化方法(基础篇)
7 年前
算法与数学之美  ·  机器学习中导数最优化方法(基础篇)
7 年前
大家-腾讯新闻  ·  杨早:孝子鲁迅为母借债买房
7 年前