美文网首页
ORACLE主键自增长(序列+触发器)

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

作者: 你笑时很美丶 | 来源:发表于2018-11-02 13:58 被阅读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');
    

    相关文章

      网友评论

          本文标题:ORACLE主键自增长(序列+触发器)

          本文链接:https://www.haomeiwen.com/subject/yptcxqtx.html