对付已存在的无主键的表

1. 复制表,删除表数据,若是数量大,能够rownum<2 sql


create skype_sms_BAK  table AS SELECT * FROM skype_sms 
delete from skype_sms_BAK


咱们将在备份表上进行增长主键的操做 oracle

2. 增长一个普通字段 ui


alter table skype_sms_BAK add SKYPE_SMS_ID varchar2(50);


--此时因为表没有数据,因此能够直接alter主键 spa


alter table skype_sms_BAK 
  add constraint PK primary key (SKYPE_SMS_ID);

3.拷贝全部原表的数据+上一个新增的id字段到bak表中,在这里,id选择的oracle自带的uuid code


insert into skype_sms_bak select t.*  ,(select sys_guid() as skype_sms_id from dual ) from skype_sms t

4.删除原有表,再把bak表复制为原表 table

create skype_sms   table AS SELECT * FROM skype_sms_bak

5.因为本来的表就没有主键,因此原始的程序代码插入的时候确定是没有主键生成策略的,为了让更改最小话,这里使用触发器完成主键策略. class

create or replace trigger skype_sms_trigger       
before insert on skype_sms
for each row       
begin       
select sys_guid()  into :new.skype_sms_id from dual;      
end ;
相关文章
相关标签/搜索