這幾天搞Oracle,想讓表的主鍵實現自動增加,查網絡實現以下:sql
create table simon_example數據庫
(網絡
id number(4) not null primary key,oracle
name varchar2(25)ide
)spa
-- 創建序列:blog
-- Create sequencerem
create sequence SIMON_SEQUENCE get
minvalue 1
maxvalue 999999999999999999999999999
start with 1
increment by 1
cache 20;
-- 創建觸發器
create trigger "simon_trigger" before
insert on simon_example for each row when(new.id is null)
begin
select simon_sequence.nextval into:new.id from dual;
end;
-------------------------------------------------------------------------
-------------------------------------------------------------------------
-------------------------------------------------------------------------
一、把主鍵定義爲自動增加標識符類型
在mysql中,若是把表的主鍵設爲auto_increment類型,數據庫就會自動爲主鍵賦值。例如:
create table customers(id int auto_increment primary key not null, name varchar(15));
insert into customers(name) values("name1"),("name2");
select id from customers;
以上sql語句先建立了customers表,而後插入兩條記錄,在插入時僅僅設定了name字段的值。最後查詢表中id字段,查詢結果爲:
id
1
2
因而可知,一旦把id設爲auto_increment類型,mysql數據庫會自動按遞增的方式爲主鍵賦值。
在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");
select id from customers;
查詢結果和mysql的同樣。因而可知,一旦把id設爲identity類型,MS SQLServer數據庫會自動按遞增的方式爲主鍵賦值。identity包含兩個參數,第一個參數表示起始值,第二個參數表示增量。
二、從序列中獲取自動增加的標識符
在Oracle中,能夠爲每張表的主鍵建立一個單獨的序列,而後從這個序列中獲取自動增長的標識符,把它賦值給主鍵。例如一下語句建立了一個名爲customer_id_seq的序列,這個序列的起始值爲1,增量爲2。
create sequence customer_id_seq increment by 2 start with 1
一旦定義了customer_id_seq序列,就能夠訪問序列的curval和nextval屬性。
curval:返回序列的當前值
nextval:先增長序列的值,而後返回序列值
如下sql語句先建立了customers表,而後插入兩條記錄,在插入時設定了id和name字段的值,其中id字段的值來自於customer_id_seq序列。最後查詢customers表中的id字段。
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");
select id from customers;
若是在oracle中執行以上語句,查詢結果爲:
id
1
3
----------------------------------------------------------------
----------------------------------------------------------------
----------------------------------------------------------------
學oracle不久,在建表時發現這樣一個問題,好比我如今建立一個表:student
create table STUDENT
(
ID NUMBER not null,
NAME VARCHAR2(20) default '男',
SEX VARCHAR2(4),
ADDRESS VARCHAR2(40),
MEMO VARCHAR2(60)
)
如今我想實現每插入一條數據,就讓id自動增加1.在SQLSERVER中這個很好實現,但在oracle中我搞了半天,查了下資料發現要用到「序列(sequence)」,「觸發器」的知識。
首先,建立一個序列:
create sequence STU
minvalue 1
maxvalue 999999999999
start with 21
increment by 1
cache 20;
而後,給表student建立一個觸發器:
create or replace trigger stu_trbefore insert on student for each rowdeclare-- local variables herebeginselect stu.nextval into :new.id from dual;end stu_tr;