Oracle外键级联更新——延迟约束和触发器实现

    Oracle外键只有级联删除没有级联更新,但是有时候系统中可能需要这样的功能,所以这里记录下实现过程。

    Oracle中的约束有两种方式,一种是延迟约束,一种是非延迟约束。所谓的非延迟约束就是说更改记录的时候会立刻进行约束条件的查看,是否因为违反了某些约束条件而不能执行修改,而延迟约束则表示不会再刚进行修改的时候进行约束查看,只有提交的时候才会检查。Oracle的级联更新就是使用这个特性来实现的。

1、首先建立外键的时候设置为延迟约束。具体的语句如下:

ALTER TABLE TEST_2 ADD CONSTRAINT TEST_2_TEST_1_FK1 FOREIGN KEY (FKID) REFERENCES TEST_1(ID) ON DELETE CASCADE DEFERRABLE;
    就是为TEST_2表增加外键,引用到TEST_1上,并且设置为级联删除和延迟约束(DEFERREABLE)。如果是使用了Oracle的Sql Developer工具,可以在约束条件一栏查看是否设置成功。

2、然后设置触发器

在TEST_1表上设置触发器,当表的主键改变了就级联的更新表TEST_2中对应的字段。

CREATE OR REPLACE
TRIGGER TEST_UPDATE 
AFTER UPDATE ON TEST_1 
FOR EACH ROW
BEGIN
  IF :OLD.ID<>:NEW.ID THEN
    UPDATE TEST_2 SET FKID=:NEW.ID WHERE FKID=:OLD.ID;
  END IF;
END;
    经过1和2两步就可以实现外键的级联更新了。基本思想就是在更新主表主键的时候进行了延迟约束,不会立刻检查,而触发器在更新之后就会级联更新附表的外键,然后提交,这是会进行约束检查,由于外键已经级联更新过了,所以这里不会有问题。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值