尽管它是 DDL,但如何回滚数据库上的 'truncate' 操作

How is possible to rollback 'truncate' operations on a database although it is DDL

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

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

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

编辑:为了回答您的问题,拥有事务性 DDL 是一项常见要求。例如。在需要特定数据库架构的软件组件的版本升级期间。

还有我的两分钱:我的许多客户都使用 Oracle。现在不要误会我的意思,Oracle 是一个很好的数据库,但是缺少事务性 DDL 可能会很烦人,因为您必须始终牢记这一点。