是否可以在主要的SQL数据库中回滚CREATE TABLE和ALTER TABLE语句?

我正在开发一个发布DDL的程序。我想知道是否CREATE TABLE可以回滚和类似的DDL

  • Postgres

  • 的MySQL

  • SQLite的

描述每个数据库如何使用DDL处理事务。


阿波罗的战车
浏览 1072回答 3
3回答

有只小跳蛙

PostgreSQL对大多数数据库对象(某些表,索引等,但没有数据库,用户)具有事务性DDL。但是实际上,任何DDL都会ACCESS EXCLUSIVE锁定目标对象,从而使其完全无法访问,直到DDL事务完成。同样,并非所有情况都得到了很好的处理-例如,如果您尝试foo在另一个事务删除它并创建替换表的同时从表中进行选择foo,那么被阻塞的事务将最终收到错误,而不是查找新foo表。(编辑:此问题已在PostgreSQL 9.3或更高版本中修复)CREATE INDEX ... CONCURRENTLY 例外,它使用三个事务在允许并发更新的同时向表添加索引,因此它本身不能在事务中执行。另外,数据库维护命令VACUUM不能在事务中使用。

万千封印

看来其他答案已经过时了。截至2019年:Postgres支持许多版本的事务性DDL。SQLite在许多版本中都支持事务性DDL。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

SQL Server