1. 程式人生 > >Oracle建表並指定主鍵自增

Oracle建表並指定主鍵自增

Oracle不允許在建表時直接指定某個欄位自增,需要通過建立序列

所以想要為某個欄位指定自增,需要1.建表;2.建立序列;3.建立觸發器

一:建表語句

Oracle資料庫建表語句

ORACLE中的關鍵字這裡均用大寫表示,中括號表示可選填或不填

CREATE TABLE  表名
(
    欄位名1  欄位型別 【NULL  |   NOTNULL  】【PRIMARY KEY①】,

    欄位名2  欄位型別 【NULL  |   NOTNULL  】②
);


①:oracle可以通過在末尾寫PRIMARY KEY(列名)的方式指定某一個列為主鍵。

②:oracle常用欄位型別number,表示數字,可以存放整數或者小數,

       number(N)表示存放N位的整數,number(N,M)表示存放長度為N的小數,精確到M位,含小數點

       varchar/varchar2,二者區別讀者自己百度,這裡不做詳解。

       date 日期型別,timestamp 時間戳型別

注意,oracle中沒有int和integer型別。

示例語句如下:
create table student
(
    s_id number(11) not null primary key,
    name varchar(20) not null,
    age number(6) not null,
    record_data date
);

為欄位添加註釋

comment on column student.s_id is '學生表ID';

comment on column student.name is '學生名稱';

comment on column student.age is '學生年齡';

comment on column student.record_data is '記錄時間';

二、建立自增序列

CREATE SEQUENCE 序列名 -- 建議使用表名+欄位名+seq字尾

INCREMENT BY 1 -- 每次加幾個

START WITH 1 -- 從1開始計數

NOMAXVALUE -- 不設定最大值

NOCYCLE -- 一直累加,不迴圈

NOCACHE -- 不建緩衝區

三、建立觸發器

CREATE TRIGGER 觸發器名

   BEFORE INSERT 表名  FOR EACH ROW WHEN (NEW.主鍵名  IS  NULL)

BEGIN

   SELECT 序列名.NEXTVAL INTO:NEW.主鍵名 FROM DUAL;

END;