序列号和同义词
序列号
主要完成在多用户环境下产生唯一的数字序列,但不会造成额外的磁盘io或事务锁。
在不使用序列号时,多个用户同时向表插入一条记录,用户必须等待以得到下一个可用的员工号,而一旦使用序列号则用户无需相互等待就可以得到下一个可用的员工号。序列生成器会自动为每个用户创建正确的员工编号。
创建序列号
Create sequence emp_seq
Start with 1000
Increment by 1
Nomaxvalue
Nocycle;
使用数据字典查看序列号信息
Select sequence_name,min_value,increment_by,cycle_flag,cache_size from user_sequences
Where sequence_name like ‘EMP%’;
创建序列
create sequence 序列名
start with 1//1开始
increment by 1 //步长
maxvalue 1|nomaxvalue //设置最大值|不设置最大值,升序时为10^27,降序-1
minvalue 1|nominvalue//设置最小值|不设置最小值,最小值为1,降序为-10^26
cycle|nocycle //假设1开始,到100结束。开启则重新由1在循环到100
cache|nocache 20 //缓存
当大量语句发生请求,申请序列时,为了避免序列在运用层实现序列而引起的性能瓶
Oracle序列允许将序列提前生成 cache x个先存入内存,在发生大量申请序列语句时,
可直接到运行最快的内存中去得到序列。但cache个数也不能设置太大,因为在数据库重启时,
会清空内存信息,预存在内存中的序列会丢失,当数据库再次启动后,
序列从上次内存中最大的序列号+1 开始存入cache x个
查看序列属性信息
Desc 序列名
修改序列属性值,不能修改start with,alter对之前的无影响,影响之后的序列号
Alter sequence 序列名
Increment by n
Maxvalue n|nomaxvalue
Minvalue n|nominvalue
Cache n|nocache
Cycle n|nocycle
同义词
同义词是数据库对象的别名,如表,视图,物化视图,触发器,序列号,java等。
方便用户访问属于其他用户的数据库对象,或出于安全目的,因为同义词名字具有随机性,没有限制,这样就隐藏创建同义词的原始对象的值。
同义词分为私有和公有,私有的只能指定用户使用,没有授权其他用户无法访问某一用户的私有同义词。公有的所有用户都可以访问
Select * from user;表不存在
Select * from scott.user;暴露了user表的用户信息,使用别名可以避免
公有同义词
创建公有同义词的用户必须具有 create public synonym权利。进行操作时需要具有delete,update等权限。
创建公有同义词
Create public synonym department for scott.dept;
使用公有同义词访问
Select * from department;
删除公有同义词
Drop public synonym department;
私有同义词
Create synonym department for scott.dept;
删除私有同义词
Drop synonym department;
切换用户模式
Alter session set current_schema=scott;