《数据库学习》orace数据库实现自增主键和重置初始值

Oracle数据库没有像Mysql那样可以直接设置主键自增,如果要实现自增的话,可以通过序列+触发器来实现。

创建自动增长序列*

tb_seq为序列名

create sequence tb_seq minvalue 1 maxvalue 99999999   -设置最大值和最小值
increment by 1    --设置步长为1
start with 1; --设置初始值为1
创建触发器

tb_auto_incr为触发器的名字
TBL_USER为表名
tb_seq为上面创建序列的名字
USER_ID为TBL_USER表中自增的字段名

create or replace trigger tb_auto_incr 
before insert on TBL_USER
 for each row
begin
select  tb_seq.nextval into :new.USER_ID from dual;     
end; 

到这里,我们就设置好了一个自增的主键了,这样每次插入的时候就可以实现USER_ID自动+1

但是,多数情况下,我们可能会需要清空该表数据,然后继续新增,这样就会出现一个问题:继续新增的时候,ID是在之前的基础上增加,而并不是从1开始,那么西面就需要解决这个问题。

重置序列

tb_seq为序列的名字

declare
n number(10);
v_startnum number(10):=2;--起始值
v_step number(10):=1;--步长
tsql varchar2(200);
v_seqname varchar2(200):='tb_seq';
begin
execute immediate 'select '||v_seqname||'.nextval from dual' into n;
n:=v_startnum-n-v_step;
tsql:='alter sequence '||v_seqname||' increment by '|| n;
execute immediate tsql;
execute immediate 'select '||v_seqname||'.nextval from dual' into n;
tsql:='alter sequence '||v_seqname||' increment by '||v_step;
execute immediate tsql;
end;

这样,我们就可以实现序列重新自增了。通过查看当前序列,就可以看到效果

查看当前序列

select tfrm_tb_seq.Currval from dual;

欢迎关注本人个人公众号,交流更多技术信息

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tomatocc

赏杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值