MySQL、SqlServer、Oracle主鍵自動增長的設置 1、把主鍵定義為自動增長標識符類型在mysql中,如果把表的主鍵設為auto_increment類型,數據庫就會自動為主鍵賦值。例如:create table customers(id int auto_increment PRimary key not null, name varchar(15));insert into customers(name) values("name1"),("name2"); 2、在MS SQLServer中,如果把表的主鍵設為identity類型,數據庫就會自動為主鍵賦值。例如:create table customers(id int identity(1,1) primary key not null, name varchar(15));insert into customers(name) values("name1"),("name2");identity包含兩個參數,第一個參數表示起始值,第二個參數表示增量。 3、Oracle列中獲取自動增長的標識符在Oracle中,可以為每張表的主鍵創(chuàng)建一個單獨的序列,然后從這個序列中獲取自動增加的標識符,把它賦值給主鍵。例如一下語句創(chuàng)建了一個名為customer_id_seq的序列,這個序列的起始值為1,增量為2。方法一、 create sequence customer_id_seq INCREMENT BY 1 -- 每次加幾個 START WITH 1 -- 從1開始計數 NOMAXVALUE -- 不設置最大值 NOCYCLE -- 一直累加,不循環(huán) CACHE 10;一旦定義了customer_id_seq序列,就可以訪問序列的curval和nextval屬性。curval:返回序列的當前值nextval:先增加序列的值,然后返回序列值create table customers(id int primary key not null, name varchar(15));insert into customers values(customer_id_seq.curval, "name1"),(customer_id_seq.nextval, "name2");方法二、或者通過存儲過程和觸發(fā)器: 1、通過添加存儲過程生成序列及觸發(fā)器:create or replace PROCEDURE "PR_CREATEIDENTITYCOLUMN"(tablename varchar2,columnname varchar2)asstrsql varchar2(1000);beginstrsql := 'create sequence seq_'||tablename||' minvalue 1 maxvalue 999999999999999999 start with 1 increment by 1 nocache';execute immediate strsql;strsql := 'create or replace trigger trg_'||tablename||' before insert on '||tablename||' for each row begin select seq_'||tablename||'.nextval into :new.'||columnname||' from dual; end;';execute immediate strsql;end;2、 對表進行執(zhí)行存儲過程exec PR_CREATEIDENTITYColumn('XS_AUDIT_RECORD','AUDIT_RECORD_ID'); 上一種方案對每一張表都要進行,下面根據用戶批量生成select a.table_name, b.column_name from dba_constraints a, dba_cons_columns b where a.constraint_name = b.constraint_name and a.CONSTRAINT_TYPE = 'P' and a.owner=user; 3、添加執(zhí)行存儲過程的role權限,修改存儲過程,加入Authid Current_User時存儲過程可以使用role權限。 create or replace procedeate_ure p_crtable Authid Current_User isbeginExecute Immediate 'create table create_table(id int)';end p_create_table;