我想知道是否可以在一个事务内运行多个 DDL 语句。我对 SQL Server 特别感兴趣,尽管其他数据库(至少是 Oracle、PostgreSQL)的答案也可能很有趣。
我一直在为事务内创建的表执行一些“CREATE TABLE”和“CREATE VIEW”,似乎存在一些不一致,我想知道 DDL 是否不应在事务内完成...
我可能可以将 DDL 移到事务之外,但是
我想得到一些这方面的参考。到目前为止我发现了什么:
- MSDN page Isolation Levels in the Database Engine tells clearly that there are restrictions on what DDL operations can be performed in an explicit transaction that is running under snapshot isolation - but I'm not using snapshot isolation and this should result as an error.
- 这可以解释为DDL操作可以在不同隔离级别下的显式事务中执行吗?
-
Oracle® Database Gateway for SQL Server 用户指南#DDL 语句指出给定事务中只能执行一条 DDL 语句- 这对于直接使用的 SQL Server 也有效吗?
对于甲骨文:
- 在SO问题内对事务中需要的 DDL 语句进行单元测试据说Oracle会隐式提交DDL语句? (尽管没有参考文献)
如果有什么重要的事情,我会通过 JTDS JDBC 驱动程序使用 Java 来完成此操作。
br.灯子
我知道大多数数据库都有限制,但 Postgres 没有。您可以在事务中运行任意数量的表创建、列更改和索引更改,并且在 COMMIT 成功后,其他用户无法看到这些更改。数据库就应该是这样的! :-)
对于 SQL Server,您可以在事务内运行 DDL,但是SQL Server 没有版本元数据,因此在事务提交之前,其他人可以看到更改。但如果处于事务中,某些 DDL 语句可以回滚,但是对于哪些有效,哪些无效,您需要运行一些测试。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)