工作中遇到有个表没主键,但有数据,然后想创建一个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) ;