ORACLE主键自增长(序列+触发器)

2018-11-02  本文已影响0人  你笑时很美丶

以前用的mysql,是有自动递增这个属性的,现在用的orlace,需要建序列来实现递增,这里记录一下:

一、先建一张表(PROJECT_LOGS)

CREATE TABLE "SYSTEM"."PROJECT_LOGS"

  ( "ID" NUMBER(12,0),

"PROJECT_MONEY" NUMBER(10,2),

"UPDATE_MONEY" NUMBER(10,2),

"USER_ID" NUMBER(12,0),

"CREATE_TIME" DATE DEFAULT sysdate,

"IS_DEL" NUMBER DEFAULT 0

  )
数据结构

二、表建好了,我们来建一下序列,我用的是sqldeveloper界面来建:

右键序列文件夹,新建
名称自拟,最好是xxx_SEQ,从1开始,每次递增一,最大值我这里默认。缓存按需要自己设置,不循环
CREATE SEQUENCE PROJECT_LOGS_SEQ 

INCREMENT BY 1 /*每次加几个*/

START WITH 1 /*从几开始*/

MINVALUE 1 /*最小值*/

NOCACHE/*一直累加,不循环*/;
//测试
INSERT INTO PROJECT_LOGS VALUES(SEQ_PROJECT_LOGS.Nextval,'1','2','3',sysdate,'6');

其实到了这里就实现了递增,只是写sql时要传入id(SEQ_PROJECT_LOGS.Nextval);

三、创建触发器:

创建触发器
选择好列名,序列名
CRETE TRIGGER "PROJECT_LOGS_TRG" BEFORE

INSERT ON PROJECT_LOGS FOR EACH ROW WHEN(new.ID is null) 

begin 

select PROJECT_LOGS_SEQ.nextval into:new.ID from dual; 

end;

//测试sql
INSERT INTO PROJECT_LOGS VALUES('','1','2','3',sysdate,'6');
上一篇下一篇

猜你喜欢

热点阅读