oracle增加主键列,创建序列,并自动根据序列设值,创建触发器。

工作中遇到有个表没主键,但有数据,然后想创建一个id主键列,并且要有值,老数据不能删,上网查了下,用sql实现了 ,现记录下来。

比如这样:

大家好,现在表中已经有数据并且数据有重复,如图

如上图,这时表中没有主键,第1,2条记录一样,第11,12一样。
现在想增加一列Integer型的主键,使表成以下图结构:


oracle

alter table uss_unbinding_ID_project add id number(38);

create sequence UNBINDING_ID_PROJECT_SEQ_ID
  minvalue 1
  maxvalue 999999999
  start with 1;
  
Update uss_unbinding_ID_project set id=UNBINDING_ID_PROJECT_SEQ_ID.nextval;
  
alter table uss_unbinding_ID_project
  add constraint UNBINDING_ID_PROJECT_PK primary key (ID);


create or replace trigger "TR_USS_UNBINDING_ID_PROJECT" 
before insert on USS_UNBINDING_ID_PROJECT
for each row
begin
 if (:new.id is null) then
  select UNBINDING_ID_PROJECT_SEQ_ID.nextval into :new.id from dual;
 end if;
end;

我用的上面那种,这个没用过,可以用做mysql吧:

alter table tabName add id number(8);
 
update tabName set id = rownum;

alter table t add contstraint pk_t primary key (col) ;



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

你是我的天晴

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值