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中对应的字段。