Welcome 微信登录

首页 / 数据库 / MySQL / 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中对应的字段。
  1. CREATE OR REPLACE  
  2. TRIGGER TEST_UPDATE   
  3. AFTER UPDATE ON TEST_1   
  4. FOR EACH ROW  
  5. BEGIN  
  6.   IF :OLD.ID<>:NEW.ID THEN  
  7.     UPDATE TEST_2 SET FKID=:NEW.ID WHERE FKID=:OLD.ID;  
  8.   END IF;  
  9. END;  
经过1和2两步就可以实现外键的级联更新了。基本思想就是在更新主表主键的时候进行了延迟约束,不会立刻检查,而触发器在更新之后就会级联更新附表的外键,然后提交,这是会进行约束检查,由于外键已经级联更新过了,所以这里不会有问题。Oracle 10.2.0.4修改RAC的ipOracle修改数据库主页的端口号相关资讯      Oracle基础教程 
  • Oracle块编程返回结果集详解  (11/10/2013 10:45:58)
  • Oracle基础教程之设置系统全局区  (08/22/2013 14:24:00)
  • Oracle基础教程知识点总结  (06/18/2013 07:43:32)
  • Oracle基础教程之tkprof程序详解  (10/22/2013 11:49:50)
  • Oracle基础教程之sqlplus汉字乱码  (07/18/2013 16:30:00)
  • Oracle 管理之 Linux 网络基础  (02/16/2013 18:37:35)
本文评论 查看全部评论 (0)
表情: 姓名: 字数