了解 Oracle 中的 ON DELETE NO ACTION
Understanding ON DELETE NO ACTION in Oracle
我在 table SRS_INST_CODE
和 SRS_INSTRUMENT
之间有一个引用完整性约束。我使用以下查询找到了 ON DELETE
规则:
SELECT a.table_name, c.delete_rule, c_pk.table_name parent_table
FROM all_cons_columns a,
all_constraints c,
all_constraints c_pk
WHERE a.owner = c.owner
AND a.constraint_name = c.constraint_name
AND c.r_owner = c_pk.owner
AND c.r_constraint_name = c_pk.constraint_name
AND c.constraint_type = 'R'
AND a.table_name = 'SRS_INST_CODE';
输出为:
SRS_INST_CODE NO ACTION SRS_INSTRUMENT
但是我可以从 SRS_INSTRUMENT
中删除,即使 SRS_INST_CODE
中有记录引用了已删除的记录。 SRS_INST_CODE
中的记录也被删除。我希望 ON DELETE CASCADE
而不是 ON DELETE NO ACTION
是这种情况。我错过了什么?
如果您通过简单的 DELETE
DML 查询删除记录,
那么这种行为最可能的原因是在 SRS_INSTRUMENT
上触发,从 SRS_INST_CODE
中删除相应的记录
您可以通过以下查询进行检查:
SELECT * FROM user_triggers WHERE table_name = 'SRS_INSTRUMENT';
我在 table SRS_INST_CODE
和 SRS_INSTRUMENT
之间有一个引用完整性约束。我使用以下查询找到了 ON DELETE
规则:
SELECT a.table_name, c.delete_rule, c_pk.table_name parent_table
FROM all_cons_columns a,
all_constraints c,
all_constraints c_pk
WHERE a.owner = c.owner
AND a.constraint_name = c.constraint_name
AND c.r_owner = c_pk.owner
AND c.r_constraint_name = c_pk.constraint_name
AND c.constraint_type = 'R'
AND a.table_name = 'SRS_INST_CODE';
输出为:
SRS_INST_CODE NO ACTION SRS_INSTRUMENT
但是我可以从 SRS_INSTRUMENT
中删除,即使 SRS_INST_CODE
中有记录引用了已删除的记录。 SRS_INST_CODE
中的记录也被删除。我希望 ON DELETE CASCADE
而不是 ON DELETE NO ACTION
是这种情况。我错过了什么?
如果您通过简单的 DELETE
DML 查询删除记录,
那么这种行为最可能的原因是在 SRS_INSTRUMENT
上触发,从 SRS_INST_CODE
中删除相应的记录
您可以通过以下查询进行检查:
SELECT * FROM user_triggers WHERE table_name = 'SRS_INSTRUMENT';