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

以前用的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');
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容