通常為新資料表加上自動編號欄位沒啥問題,但是如果是一個已存在的資料表,而且裡面還有一堆資料了,這時就會比較麻煩了,如果直接加自動編號欄沒有問題,但是已存在的資料不會有自動編號,這時就需要一些指令來為已存在的資料填上自動編號。
這個例子是 student 資料表,此資料表是已存在的,而且裡面有成千上萬的資料了…
第一步:新增欄位,但是 SET NOT Null 先不要設。
ALTER TABLE student ADD COLUMN id integer;
ALTER TABLE student ALTER COLUMN id SET STORAGE PLAIN;
ALTER TABLE student ALTER COLUMN id SET DEFAULT nextval('student_id_seq'::regclass);
第二步:為已存在的資料填上自動編號。
UPDATE student set id=nextval('student_id_seq'::regclass);
第三步:執行下列 SET NOT Null 的指令:
ALTER TABLE student ALTER COLUMN id SET NOT NULL;
基本上就是:
1.建立 student_id_seq Sequence,指令我就不寫了,Google 就查的到。
2.新增準備當自動編號的欄位,預設值當然就是剛剛建立的 Sequence。
3.更新自動編號欄,使已存在的資料填上「自動編號」。
4.將自動編號欄設成 Not Null(這一步是選擇性的)。