天天看點

MySQL,Oracle建立主鍵自增表

MySQL

在建表的時候聲明字段即可

id int auto_increment primary key not null

Oracle

第一步:建立表

drop table t_role;
create table t_role (
  role_name varchar(255) NOT NULL,
  note varchar(255) NOT NULL,
  id number NOT NULL,
  PRIMARY KEY (id)
);
           

這裡需要注意主鍵id得是number類型的,如果是int類型将無法觸發觸發器。

第二步:建立序列

create sequence role_sequence
 minvalue 1  --最小值
 nomaxvalue  --不設定最大值(由機器決定),或 根據表字段的值範圍設定 maxvalue
 maxvalue 99999999  -- 最大值
 start with 1   --從1開始計數,數值可變
 increment by 1  --每次加1,數值可變
 nocycle  --一直累加,不循環
 nocache;  --不建緩沖區。      如果建立cache那麼系統将自動讀取cache值個seq,這樣會加快運作速度;如果在單機中使用cache,或者oracle死了,那麼下次讀取的seq值将不連貫,是以不建議使用cache。
 create sequence role_sequence
 minvalue 1 
 nomaxvalue  
 start with 1   
 increment by 1  
 nocycle  
 nocache;  
           

第三步:建立觸發器執行

create or replace trigger role_trig 
before
insert on t_role for each row when (new.id is null)
BEGIN
select role_sequence.nextval into :new.id from dual;
END;
/
           

測試一下:

insert into t_role(note,role_name) values(\'連接配接\',\'nihao\');
insert into t_role(note,role_name) values(\'連接配接\',\'nihao\');
insert into t_role(note,role_name) values(\'連接配接\',\'nihao\');
commit;