关于DELETE CASCADE的UPDATE限制

时间:2014-04-04 19:16:58

标签: sql oracle

ALTER TABLE IDN_APPMGT_CLAIM_MAPPING 
ADD CONSTRAINT CLAIMID_APPID_CONSTRAINT FOREIGN KEY (APP_ID) REFERENCES IDN_APPMGT_APP (ID) 
ON UPDATE RESTRICT
ON DELETE CASCADE;

我想将此SQL转换为Oracle。由于Oracle没有ON UPDATE RESTRICT,我无法想象应该如何完成。只省略ON UPDATE子句会解决问题吗?

ALTER TABLE IDN_APPMGT_CLAIM_MAPPING 
ADD CONSTRAINT CLAIMID_APPID_CONSTRAINT FOREIGN KEY (APP_ID) REFERENCES IDN_APPMGT_APP (ID) 
ON DELETE CASCADE;

1 个答案:

答案 0 :(得分:4)

根据https://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.htmlRESTRICTON UPDATE条款中的ON DELETE

  

拒绝父表的删除或更新操作。

换句话说,当子表中的行引用此值时,尝试更改父表中的值将失败。

您不能在Oracle外键约束中指定ON UPDATE子句,因为Oracle在外键约束中不支持ON UPDATE ...选项。但是,这对您来说不是问题,因为Oracle使用UPDATE语句和外键约束的行为与MySQL使用ON UPDATE RESTRICT的行为相同。实际上,ON UPDATE RESTRICT也是MySQL中的默认值,因此您可以在两个数据库中省略它。

因此,总而言之,是的,从约束中省略ON UPDATE RESTRICT子句将解决您的问题。