You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用DELETE语句能否造成外键约束违反?TRUNCATE与DELETE真题疑问

Oracle 1z0-071真题解析

原题

下列关于TRUNCATE和DELETE的描述中,正确的是?
A. 只要会违反外键约束,就绝对无法对表执行TRUNCATE操作
B. 处理大表时,TRUNCATE的执行速度比DELETE更快
C. 对于带有多个索引和触发器的表,DELETE的执行速度比TRUNCATE更快
D. 只要会违反外键约束,就绝对无法删除表中的行

正确答案:B


D选项错误原因

你测试时使用的是默认无级联规则的外键约束,所以会出现父表存在关联子表数据时无法删除的情况,但Oracle外键支持两种级联配置,满足条件时即使删除操作原本会触发外键违反,也可以正常执行:

  • 外键设置ON DELETE CASCADE:删除父表行时,数据库会自动同步删除子表中所有关联的行,不会触发约束报错
  • 外键设置ON DELETE SET NULL:删除父表行时,数据库会自动将子表关联行的外键字段设为NULL,只要子表外键字段允许为空,就不会触发约束报错

级联删除场景验证代码

-- 创建父表
CREATE TABLE question (id INTEGER PRIMARY KEY);
-- 创建子表,外键配置级联删除规则
CREATE TABLE answer (fk INTEGER REFERENCES question(id) ON DELETE CASCADE);

INSERT INTO question VALUES (1);
INSERT INTO answer VALUES (1);
COMMIT;

-- 该语句可正常执行,数据库会自动删除子表中关联的行,无外键约束报错
DELETE FROM question;

运行上述代码即可复现“存在外键关联时也能删除父表行”的场景,直接证明D选项的表述不成立。


其他选项错误补充(可选参考):

  • A错误:如果临时禁用引用该表的外键约束,即可正常执行TRUNCATE,“绝对无法”的表述不成立
  • C错误:TRUNCATE是DDL操作,无需逐行扫描、逐行记录日志,也不会触发DML触发器,无论表上有多少索引和触发器,速度都远快于DELETE

内容的提问来源于stack exchange,提问作者Beginner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 03:06:03