對付已存在的無主鍵的表

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 ;
相關文章
相關標籤/搜索