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 ;