oracle 给已存在的表增加主键自增约束

来源:互联网 发布:dd for windows 编辑:程序博客网 时间:2024/05/16 15:18

如果使用的是hibernate的主键自增约束,请参照点击打开链接。

这里只记录针对Oracle本身的自增约束。

步骤大概有3步,

1.创建表

2.创建序列sequence

3.设置触发器以应用sequence到表的主键

这里以AD_AUDIT_PLAN表为例。

create sequence AD_AUDIT_PLAN_SEQUENCE minvalue 1 maxvalue 99999999999999999999 start with 1 increment by 1 cache 20;

这里创建序列完毕。序列可以在数据库中找到(感觉类似创建了一张表)。这里是说创建一个叫AD_AUDIT_PLAN_SEQUENCE的序列,里面的最小值是1,最大值是20个9(多少个取决于你主键的位数,也可以在主键范围内取值),然后从1开始,每次自增1,缓存为20.
create or replace trigger ad_audit_plan_tg before insert on ad_audit_plan
for each row when (new.id is null) 
  begin 
    select ad_audit_plan_sequence.nextval into :new.id from dual;
  end ad_audit_plan_tg;

这里创建触发器,并把表跟序列关联起来。我理解的是,序列只是一个存储1.2.3.4.5.。。。。的地方,当表中每次插入一条数据的时候就从序列中取一个数字当做主键插入表中,这个数字是唯一的,只能取一次,取过了序列里就没有这个数了。

这里还要注意,end后面要跟上触发器名,不然执行不成功。