oracle 主鍵自動增加

oracle 主鍵自動增加  

2009-12-11 16:07:00|  分類: 數據庫資料|字號 訂閱mysql

 
 

這幾天搞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;

相關文章
相關標籤/搜索