我想知道是否可以在一个事务内运行多个 DDL 语句。我对 SQL Server 特别感兴趣,尽管其他数据库(至少是 Oracle、PostgreSQL)的答案也可能很有趣。
我一直在为事务内创建的表执行一些“CREATE TABLE”和“CREATE VIEW”,似乎存在一些不一致,我想知道 DDL 是否不应在事务内完成。 .
我可能可以将 DDL 移到事务之外,但是 我想得到一些这方面的引用。到目前为止我发现了什么:
- MSDN 页面 Isolation Levels in the Database Engine清楚地表明在快照隔离下运行的显式事务中可以执行哪些 DDL 操作是有限制的 - 但我没有使用快照隔离,这应该会导致错误。
- 这可以解释为可以在不同隔离级别下的显式事务中执行 DDL 操作吗?
- Oracle® Database Gateway for SQL Server User's Guide#DDL Statements规定在给定事务中只能执行一个 DDL 语句 - 这对于直接使用的 SQL Server 也有效吗?
对于甲骨文:
- 在SO问题中Unit testing DDL statements that need to be in a transaction据说Oracle会隐式提交DDL语句? (尽管没有引用文献)
如果有什么重要的事情,我会通过 JTDS JDBC 驱动程序使用 Java 来完成此操作。
b.r。灯子
最佳答案
我知道大多数数据库都有限制,但 Postgres 没有。您可以在事务中运行任意数量的表创建、列更改和索引更改,并且在 COMMIT 成功后,其他用户无法看到这些更改。数据库就应该是这样的! :-)
对于 SQL Server,您可以在事务内运行 DDL,但是 SQL Server does not version metadata ,因此在事务提交之前,其他人可以看到更改。但是some DDL statements can be rolled back if you are in a transaction ,但是对于哪些有效,哪些无效,您需要运行一些测试。
关于sql - 是否可以在事务内(在 SQL Server 内)运行多个 DDL 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1043598/