Oracle联合主键自增

来源:互联网 发布:电脑桌面工作计划软件 编辑:程序博客网 时间:2024/05/29 19:37

新建表
这里写图片描述

CREATE TABLE SCHEDULES(  SCHEDULES_ID NUMBER(19) DEFAULT NULL          NOT NULL,  USER_ID      NUMBER(19) DEFAULT NULL          NOT NULL    CONSTRAINT SCHEDULES_USERS_USER_ID_FK    REFERENCES USERS    ON DELETE CASCADE,  DATE_TIME    DATE DEFAULT NULL                NOT NULL,  EVENT        VARCHAR2(100 CHAR) DEFAULT NULL  NOT NULL,  CONSTRAINT SCHEDULES_ID_USER_ID_PK  PRIMARY KEY (SCHEDULES_ID, USER_ID))

SCHEDULES_ID和USER_ID是联合主键
**要实现的是:**schedules_id根据user_id的不同自增,例如在user_id=1中,schedules_id最大是3,那么新插入一条user_id=1的记录,使schedules_id=4.user_id=2中,schedules_id最大是5,那么新插入一条user_id=2的记录,使schedules_id=6.

create or replace trigger tri_scheduleid_insertbefore insert on SCHEDULESfor each row  DECLARE  begin    select MAX(SCHEDULES_ID)+1 into :new.SCHEDULES_ID from SCHEDULES WHERE USER_ID=:new.USER_ID;  end tri_scheduleid_insert;

直接使用触发器实现,不用创建sequence。

但是当MAX(SCHEDULES_ID)不存在时,会无法插入
修改后触发器的创建是

CREATE OR REPLACE TRIGGER tri_scheduleid_insertBEFORE INSERT ON SCHEDULESFOR EACH ROW  DECLARE    nextid NUMBER;  BEGIN    SELECT MAX(SCHEDULES_ID) + 1    INTO nextid    FROM SCHEDULES    WHERE USER_ID = :new.USER_ID;    IF INSERTING    THEN      IF nextid > 0      THEN        :new.SCHEDULES_ID := nextid;      ELSE :NEW.SCHEDULES_ID := 1;      END IF;    END IF;  END tri_scheduleid_insert;

首先定义一个变量nextid来保存查询得到的最大值+1,如果nextid大于0,则说明插入记录的user_id的值存在,schedules_id=nextid;否则
说明插入记录的user_id的值不存在,使schedules_id=1;
注意: :new.SCHEDULES_ID := nextid;
赋值等号左边的“:”

同样的思考应该可以不创建sequence来创建触发器实现主键的自增。我没有做,毕竟创建sequence还是有好处的。这里联合主键的自增我没找到有关sequence的实现。如果有更好的办法请留下你的建议。

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 张茆淘宝店 张梦怡baby 张梦怡不加v 张蔷 照片 张庆伟去向 张三丰异世游 张韶涵的鞋店 张氏金锁玉关 张氏祛疹方 张倏雨 张田欣被调查 张庭宾微博 张庭宾新浪博客 张婉悠 moko 张婉悠moko 张万年女儿 张万年死前吐露真相 张万年死前吐真言 张伟杰照片 张献忠剿四川实录 张晓龙 康熙来了 张晓龙康熙来了 张晓龙任泉 张歆艺 姚笛 张歆艺和姚笛对比照 张歆艺离婚后首发声 张歆艺怒吼萌娃 张馨予晒北漂旧照 张学津去世 张杨果而 走光 张杨娃娃 张一山送粉丝香吻 张一一图片 张依依qq皮肤 张依依素颜 张依依素颜照 张依依微博 张艺谋夫妻合照ps 张艺谋买集资房 张宇燕简历 张玉珊个人资料