oracle如何实现更新一个表的同时更新其相应子表的字段值

oracle如何在更新父表的同时去更新字表对应的外键值?
oracle外键总只有级联删除没有级联更新。我们的做法是这样的。
通过延迟约束和触发器来实现。
下面这个例子搞懂就OK了。
先创建两个表test_1 和 test_2;
oracle如何实现更新一个表的同时更新其相应子表的字段值

然后给test_1的id字段添加主键约束

oracle如何实现更新一个表的同时更新其相应子表的字段值

给test_2的id字段添加外键约束
oracle如何实现更新一个表的同时更新其相应子表的字段值

我们最开始肯定是创建的这样的外键约束,但是

这样是无法实现级联更新的。
需要让这个约束延迟。但是oracle又没有修改约束的子句,所以只能删除约束,然后重新添加约束。
我对test_2表中的所有约束进行查询
oracle如何实现更新一个表的同时更新其相应子表的字段值

查到这个外键约束的名字是consraint_name
然后我将其删除
oracle如何实现更新一个表的同时更新其相应子表的字段值

然后我添加新的可延迟(deferrable)外键约束

oracle如何实现更新一个表的同时更新其相应子表的字段值

创建触发器
oracle如何实现更新一个表的同时更新其相应子表的字段值

可以对已经创建的触发器进行查询
oracle如何实现更新一个表的同时更新其相应子表的字段值

插入实验数据
oracle如何实现更新一个表的同时更新其相应子表的字段值
oracle如何实现更新一个表的同时更新其相应子表的字段值

oracle如何实现更新一个表的同时更新其相应子表的字段值

oracle如何实现更新一个表的同时更新其相应子表的字段值

插入结果如下:

oracle如何实现更新一个表的同时更新其相应子表的字段值

将test_1表中id为1的全部更新为4
oracle如何实现更新一个表的同时更新其相应子表的字段值
oracle如何实现更新一个表的同时更新其相应子表的字段值
可以看到已经进行了同步的更新。
注意:1.触发器一定要设置对,不要把触发器设在了不该设的表上。