oracle序列
之前项目中没有系统使用过oracle,只是简单的使用,也没有系统的看过oracle的书。这次换工作,现在公司所有项目都是使用oracle,所以也慢慢的了解了oracle的其他的内容,比如序列。 一、oracle序列oracle主键没有自增类型,所以一般使用序列产生的值作为某张表的主键,实现主键自增。oracle是oracle用来生成一组等间隔的数值。序号的编号不像mysql在插入记录的时候自动生成,必须调用序列的方法来生成,一般调用nextval方法。 二、创建语法create sequence 序列名称 start with:生成第一个序列号,对于升序列,其默认值为序列最小值;对于降序序列,其默认值为序列的最大值 。 修改语法: 三、实例创建:
create sequence seq_tb_person minvalue 1 maxvalue 99999999999999 start with 1 increment by 1 cache 20; 使用: insert into demo(id,username,age,password) values (seq_tb_demo.nextval,'张三',20,'zhang123') 一般在实际情况中通过建立触发器,当有数据插入表时,使用oracle序列为其去递增主键
-- 创建触发器 create or replace trigger trigger_set_person_id before insert on person for each row begin select seq_tb_person.nextval into :new.id from dual; end; 修改序列:
alter sequence seq_tb_person minvalue 1 maxvalue 999999999999999999 -- start with 49 对于已经启动的序列,无法设置初始值 increment by 1 cache 20; 查看用户序列:
select sequence_name,min_value,max_value,increment_by,last_number from user_sequences; 删除序列:
drop sequence 序列名; 四、总结一个序列可以被多张别使用,不过一般建议为每个表建立单独的序列。 当使用到序列的事务发生回滚。会造成序列号不连续。在用生成的序列值作为编号做插入数据库操作时,可能遇到事务提交失败,从而导致序号不连续。 大量语句发生请求,申请序列时,为了避免序列在运用层实现序列而引起的性能瓶颈。Oracle序列允许将序列提前生成 n个先存入内存,在发生大量申请序列语句时,可直接到运行最快的内存中去得到序列。但cache个数最好不要设置过大,因为在数据库重启时,会清空内存信息,预存在内存中的序列会丢失,当数据库再次启动后,序列从上次内存中最大的序列号+1 开始存入n个。这种情况也能会在数据库关闭时也会导致序号不连续。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |