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

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

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


给test_2的id字段添加外键约束

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

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

查到这个外键约束的名字是consraint_name
然后我将其删除

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


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

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

插入实验数据


插入结果如下:

oracle如何实现更新一个表的同时更新其相应子表的字段值_第5张图片

将test_1表中id为1的全部更新为4

oracle如何实现更新一个表的同时更新其相应子表的字段值_第6张图片
可以看到已经进行了同步的更新。
注意:1.触发器一定要设置对,不要把触发器设在了不该设的表上。


你可能感兴趣的:(Oracle)