CREATE TABLE par (i NUMBER CONSTRAINT par_pk PRIMARY KEY);
CREATE TABLE chi (i NUMBER CONSTRAINT chi_fk REFERENCES par(i) ON DELETE CASCADE);
INSERT INTO par VALUES(1);
INSERT INTO chi VALUES(1);
1) 如果您有oracle12或更高版本,并且外键 ON DELETE CASCADE ,您可以使用truncate cascade,我认为这是最快的选项:
TRUNCATE TABLE par CASCADE;
Table PAR truncated.
SELECT count(*) FROM par;
0
SELECT count(*) FROM chi;
0
2) 如果外键定义为 ON DELETE CASCADE ,您可以使用 DELETE ,我认为这是最慢的选择:
DELETE FROM par;
1 row deleted.
SELECT count(*) FROM par;
0
SELECT count(*) FROM chi;
0
2条答案
按热度按时间jgwigjjp1#
但是,当我以相同的顺序执行“delete from”时,所有与约束相关的错误都被避免了。
这是启用约束的唯一方法。不能截断。如果仍要截断表,则可以找到
constraint name
从user_constraints
,然后DISABLE
他们:那你就可以了
TRUNCATE
并重新启用约束:如果你的table有
ON DELETE CASCADE
选项,然后从oracle12.1
接下来,您可以使用:注意,两个
DELETE CASCADE
以及TRUNCATE CASCADE
如果层次结构中的任何关系未使用ON DELETE CASCADE
条款。ryevplcw2#
有三种方法可以从父/子表中删除:
1) 如果您有oracle12或更高版本,并且外键
ON DELETE CASCADE
,您可以使用truncate cascade,我认为这是最快的选项:2) 如果外键定义为
ON DELETE CASCADE
,您可以使用DELETE
,我认为这是最慢的选择:3) 否则,可以禁用外键、截断表并重新启用外键。这很快,但比其他选项的风险要大一点(请检查约束是否都有效):
另外,不可能将外键从正常更改为
ON DELETE CASCADE
. 我想你必须放弃并重新创造它们: