的腳本,給什麼就足夠了榜樣有一個表作爲一個用於多個TABLE的父項[顯示兩個子表,每個都有相同 INSERT TRIGGER],橫跨每個將具有從剛好一個分配的下一序列值,從而共享 SEQUENCE。當然,家長將得到每一個序列值,和每個孩子將得到只有那些沒有在任何其他子表值:
drop table AppFile01 ;
drop table AppFile02 ;
drop table Master_IDENTITY ;
drop sequence ID_SEQ ;
create table Master_IDENTITY
(Master_ID BIGINT NOT NULL
, constraint Master_IDENTITY_PK
PRIMARY KEY (Master_ID)
)
;
CREATE SEQUENCE ID_SEQ AS BIGINT
START WITH 10000 INCREMENT BY 1
NO MAXVALUE NO CYCLE CACHE 100
;
create table AppFile01
(sKeyAF BIGINT not null
, ts timestamp default current timestamp
, constraint AppFile01_PK
PRIMARY KEY (sKeyAF)
, constraint AppFile01_FK
FOREIGN KEY (sKeyAF)
REFERENCES Master_IDENTITY (Master_ID)
ON DELETE CASCADE ON UPDATE NO ACTION
)
;
create trigger AppFile01_BI BEFORE INSERT
on AppFile01
referencing new as N
for each row mode db2sql
begin
declare NxtSeq BIGINT ;
set NxtSeq = NEXT VALUE FOR ID_SEQ ;
insert into Master_IDENTITY values (NxtSeq) ;
set N.sKeyAF = NxtSeq ;
end
;
create table AppFile02
(sKeyAF BIGINT not null
, ts timestamp default current timestamp
, constraint AppFile02_PK
PRIMARY KEY (sKeyAF)
, constraint AppFile02_FK
FOREIGN KEY (sKeyAF)
REFERENCES Master_IDENTITY (Master_ID)
ON DELETE CASCADE ON UPDATE NO ACTION
)
;
create trigger AppFile02_BI BEFORE INSERT
on AppFile02
referencing new as N
for each row mode db2sql
begin
declare NxtSeq BIGINT ;
set NxtSeq = NEXT VALUE FOR ID_SEQ ;
insert into Master_IDENTITY values (NxtSeq) ;
set N.sKeyAF = NxtSeq ;
end
;
而下面的請求,測試和顯示效果;沒有特別的原因,我選擇使用的文字值-1
過,例如,DEFAULT
:
insert into AppFile01 values(-1, DEFAULT) ;
; -- gets value 10000
insert into AppFile02 values(-1, DEFAULT)
, (-1, DEFAULT)
; -- gets values 10001 and 10002
insert into AppFile01 values(-1, DEFAULT) ;
; -- gets value 10003
select * from master_id
; -- likeness of report from above query
MASTER_ID
10,000
10,001
10,002
10,003
select * from appfile01
; -- likeness of report from above query
SKEYAF TS
10,000 2016-10-09-18.38.28.347468
10,003 2016-10-09-18.38.28.400702
select * from appfile02
; -- likeness of report from above query
SKEYAF TS
10,001 2016-10-09-18.38.28.372121
10,002 2016-10-09-18.38.28.386622
你爲什麼要這麼做?我的意思是,對於所有主鍵,單個序列對我來說不是一個好主意,因爲它將成爲熱點。 – MichaelTiefenbacher
我想有一個唯一的ID爲所有實體。同樣以這種方式,開發人員不能將錯誤的外鍵(其他表的pk)插入表中,因爲鍵只存在一次。 – JMX
首先,你的函數是不確定的,因爲它永遠不會返回相同的值。但是那不重要 - 你的整個方法似乎是錯誤的。 – mustaccio