【问题标题】:Oracle's specification or SQL's ? : Truncate table with foreign key constraintsOracle 的规范还是 SQL 的? : 用外键约束截断表
【发布时间】:2012-03-01 15:56:18
【问题描述】:

我想看到一个关于“使用外键约束截断表”的规范,如下所示。有谁知道它是在哪里定义的?

不利的一面是,如果您有一个引用的外键约束 您尝试截断的表,这将不起作用 - 即使 引用表中没有数据!这是因为外键 检查是使用 DDL 而不是 DML 完成的。这可以通过 暂时禁用表的外键约束。 http://www.orafaq.com/faq/difference_between_truncate_delete_and_drop_commands

【问题讨论】:

    标签: oracle truncate


    【解决方案1】:

    您是指Oracle's truncate documentation 的截断表部分限制中的第四个项目符号?

    您不能截断已启用外键的父表 约束。您必须在截断之前禁用约束 桌子。一个例外是您可以截断表,如果 完整性约束是自引用的。

    【讨论】:

    • 就是这样!但它没有明确提及“无数据”条件。如果你知道,请教我。
    • @yusaku - 它说'除非子表不包含数据',这是一个笼统的声明,你永远不能这样做。它(强烈地,IMO)暗示它确实的意思是“即使没有数据”。正如 orafaq 链接所说,那是因为它是一个 DDL 语句。让它查看你正在截断的表中的数据,更不用说引用它的任何表,这意味着它也必须执行 DML,改变它的性质,并且它会失去一些效率优势 - 作为纯 DDL 它不会' 根本不需要检索任何数据(在数据字典本身之外)。
    猜你喜欢
    • 2011-04-20
    • 2019-11-04
    • 2011-07-24
    • 2016-07-28
    • 2019-11-30
    • 1970-01-01
    • 2020-09-07
    相关资源
    最近更新 更多