序列及觸發器(oracle)

2021-12-30 08:07:59 字數 1677 閱讀 4597

oracle在建立表時和其他的資料庫有點不一樣,如sql server可以在int型別的字段後加上identity(1,1),該字段就會從1開始,按照+1的方式自增,將這個字段設定為主鍵,有利於我們進行資料的插入操作。mysql中可以使用「auto_increment」即可。但是oracle有點麻煩,需要使用序列和觸發器。

首先我們建立乙個員工表。

create table employee(

id int ,

deptno number,

empno number,

ename varchar2(16),

job varchar2(32),

sal float,

hiredate date,

constraint pk_employee primary key(empno)

);第二,建立員工表自動增長序列

create sequence employ_autoinc

minvalue 1

maxvalue 9999999999999999999999999999

start with 1

increment by 1

nocache;

第三,建立觸發器將序列中的值賦給插入employee表的行

create or replace tirgger insert_employee_autoinc

before insert on employee

for each row

begin

select employ_autoinc.nextval into :new.id from dual;

end insert_employee_autoinc

最後測試一下我們的成果

insert into employee(deptno,empno,ename,job,sal,hiredate)

values(520,5201002,'james zhou','pd',6000,to_date('2012-10-22','yyyy-mm-dd'));

select * from employee;

當然也可以不使用觸發器,而是在插入時在sql語句中呼叫序列,例如:

insert into employee values(seq_test.nextval, ……) ;increment by 用於定義序列的步長,如果省略,則預設為1,如果出現負值,則代表序列的值是按照此步長遞減的。

start with 定義序列的初始值(即產生的第乙個值),預設為1。

maxvalue 定義序列生成器能產生的最大值。選項nomaxvalue是預設選項,代表沒有最大值定義,這時對於遞增序列,系統能夠產生的最大值是10的27次方;對於遞減序列,最大值是-1。

minvalue定義序列生成器能產生的最小值。選項nomaxvalue是預設選項,代表沒有最小值定義,這時對於遞減序列,系統能夠產生的最小值是10的26次方;對於遞增序列,最小值是1。

cycle和nocycle 表示當序列生成器的值達到限制值後是否迴圈。cycle代表迴圈,nocycle代表不迴圈。如果迴圈,則當遞增序列達到最大值時,迴圈到最小值;對於遞減序列達到最小值時,迴圈到最大值。如果不迴圈,達到限制值後,繼續產生新值就會發生錯誤。

cache(緩衝)定義存放序列的記憶體塊的大小,預設為20。nocache表示不對序列進行記憶體緩衝。對序列進行記憶體緩衝,可以改善序列的效能。

oracle序列及觸發器案例

oracle在建立表時和其他的資料庫有點不一樣,如sql server可以在int型別的字段後加上identity 1,1 該字段就會從1開始,按照 1的方式自增,將這個字段設定為主鍵,有利於我們進行資料的插入操作。mysql中可以使用 auto increment 即可。但是oracle有點麻煩,...

Oracle 序列,觸發器

序列是什麼 序列就是按照一定的規則,不斷增長 不斷減少 的乙個數字 用於我們資料庫表裡 作為資料的乙個唯一標識。序列的語法 建立序列 create sequence seq objid 建立乙個名稱為seq objid 的序列 increment by 1 每次增長1 1,2,3,4,5,6,7,s...

oracle 建序列,觸發器

oracle是全球最大的關聯式資料庫,她的使用有很多技巧,常用的建立表空間,建立序列,建立觸發器等嗾使是初學者需要掌握的內容。首先登陸資料庫 啟動命令列 cmdsqlplus 以管理員 sys 登陸資料庫 sqlplus sys password as sysdba 建立臨時表空間 create t...