怎么可能回滚'截断'虽然它是DDL,但对数据库的操作

时间:2016-09-18 12:14:57

标签: database ddl rollback truncate

我已经读过' truncte'是一个DDL,也可以回滚删除的数据' truncate' 。这是相当矛盾的,因为我们无法回滚任何DDL语句。你能解释一下这个概念吗?

1 个答案:

答案 0 :(得分:1)

这取决于支持DDL的数据库是事务性的。例如,IBM DB2,Ingres和PostgreSQL支持此功能,但另一方面Oracle不支持(它支持不同的东西) - 您无法在Oracle中回滚truncate语句。

这里是对PostgreSQL贡献者创建的databases supporting transactional DDL的非详尽概述。

编辑:要回答您的问题,通常需要使用事务性DDL。例如。在需要特定数据库架构的软件组件的版本升级期间。

仅仅是我的两分钱:我的许多客户都使用Oracle。现在不要误会我的意思,Oracle是一个很好的数据库,但缺乏事务性DDL可能非常烦人,因为你总是要记住它。