我有3张桌子:A,B,C。
当我删除A中的条目时,如何设置约束以删除级联B的元素? (使用Oracle DBMS)。
我试过这个:
ALTER TABLE A ADD CONSTRAINT constraint FOREIGN KEY (a) REFERENCES B (a) ON DELETE CASCADE
但是抛出了下一个错误:
ORA-02270: no matching unique or primary key for this column-list
由于
编辑:
我在表B中添加了两个外键:
ALTER TABLE B ADD CONSTRAINT FOREIGN KEY (a) REFERENCES A (a) ON DELETE CASCADE
ALTER TABLE B ADD CONSTRAINT FOREIGN KEY (c) REFERENCES C (c) ON DELETE CASCADE
然后,我将删除表B中的元素,同时删除A和C中的条目。
答案 0 :(得分:1)
满足此要求:
然后,我将删除表B中的元素,同时删除A和C中的条目。
您需要通过添加外键约束将B
表作为表A
和C
的父表,将B
表引用到{{1} }和A
表。
请注意,引用列的数量必须与引用的列数相匹配:
C
答案 1 :(得分:0)
这是一个猜测,但我假设表B
是A
和C
的孩子(也许B
是桥接(或A
和C
之间的交叉引用表,其中A
和C
共享多对多关系。)
Table A \*---1 Table B 1---\* Table C (* = many, 1 = one)
我还注意到您在标识FK
中引入的FK
(由于B(a)
是B
主键的一部分)。
这使得表A成为这种关系中的父母,而B则是孩子。根据我的经验,任何FK都需要添加到关系的子方面(在本例中为表B)。
我不是Oracle的专家,但这不是更有意义吗?...
ALTER TABLE B ADD CONSTRAINT constraint FOREIGN KEY (a) REFERENCES A (a) ON DELETE CASCADE
这应删除所有B
行,引用您选择删除的任何A
行的PK。但是,我不是Oracle的专家,所以只有具备Oracle智能的人可以确认(或炸弹)我的解释才能获得面子。