序列、同义词

通常我们在创建一个表时,都会定义一列为主键,通常是数字,对于主键我们的要求就是非空且唯一,然而在实际插入数据的时候,我们如何才能保证这个数据是唯一的呢,一种方式就是通过java代码写个工具类,产生唯一的数字,另一种方式就是今天所要介绍的第一个数据库对象–序列。
1.什么是序列?
序列是oracle提供的用于产生一系列唯一数字的数据库对象。
2.它有什么作用?
自动提供有规律且唯一的值;
共享对象;
通常用于表的主键的值;
将序列存入内存可以提高查询效率。
3.定义序列
create sequence seq_name //序列名
increment by 增长数 //每次增长幅度
start with 起始值 //以什么数字为第一个值
maxvalue 最大值 //序列最大值
minvalue 最小值 //序列最小值
Cycle 循环 nocycle 不循环 //如果为循环使用,则到达最大值或者最小值后重新建立对象
Cache 缓存 n //是否将序列缓存在内存中,n 代表缓存的序列个数
//Cache<maxvalue-minvalue/increment by 代表缓存所有序列值
//创建一个序列,要求开始为1001,每次增长1,最大值为99999,最小值为1001,不缓存,不循环。
eg:create sequence emp_eid_seq increment 1 start with 1001 maxvalue 99999
minvalue 1001 nocycle nochache
4.我们已经知道如何去创建序列了,那么该如何去使用我们已经创建的序列呢?
答:在使用的之前我们需要了解两个”方法”,一个是 序列名.nextval,这个可以类别我们java中的迭代器的概念,代表指向下一个序列值,而序列名.currval,则返回当前值。我们通过伪表dual,来展示一下;
select emp_eid_seq.nextval from dual; //返回结果为1001;
select emp_eid_seq.nextval from dual;//返回结果为1002; 所以seq_name.nextval 会返回下一个序列值,并将”指针“指向下一个数,如果不理解就去复习一下java迭代器概念。
select emp_eid_seq.currval from dual; //返回结果为1002,返回当前指针所指向的数值,并不移动指针。
所以和迭代器类似,如何要使用currval.必须要配合 nextval, 不然一直都会取得当前数据,我们在运用中通常用的是nextval,(移动“指针”同时取到值),切记,第一次调用序列时,必须先调用nextval,不然调用currval会报错显示“currval尚未在会话中定义”
Select myseq.nextval from dual;
Select myseq.currval from dual;
( 必须先有nextval,才能有currval)
查询完之后就已经自增1了
Insert into table1 values(myseq.nextval) 这时候已经是2了
5.Cycle,Cache
而用了nocycle,就可以确保当该序列用于多张表的时候,ID是唯一的
用 cycle时,用法如下:
create sequence myseq2 start with 1 increment by 1 cycle maxvalue 3
nocache ;
这样到3之后,要会重新从1开始
如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,这样存取的快些。cache里
面的取完后,oracle自动再取一组到cache。 使用cache或许会跳号, 比如数据库突然不正常down掉
( shutdown abort),cache中的sequence就会丢失. 所以可以在create sequence的时候用nocache防止
这种情况 不能改变当前值,但是可以改变增量 Alter sequence myseq increment by 3;
6.同义词
在任何一个用户下,都可以直接访问dual,而不需要加上前缀的用户名如:scott.emp
Select * from dual;
为什么?因为同义词的存在
Dual其实是sys用户下的一张表
select table_name from user_tables where lower(table_name) = ‘dual’;
作用:
很方便的操作不同用户下的对象
能使两个应用程序使用不同的名字指向同一张表
使用不同的用户指向同一张表的。
Create synonym dept for soctt.dept;(这样创建的同义词是私有的,只有创建者才能用)
Drop synonym dept;
Create public synonym dept for soctt.dept;(这样创建的同义词才是公有的)
Drop public synonym dept;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值