为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

阿波罗的战车 2019-11-13 13:41:26
我正在开发一个发布DDL的程序。我想知道是否CREATE TABLE可以回滚和类似的DDLPostgres的MySQLSQLite的等描述每个数据库如何使用DDL处理事务。
查看完整描述

3 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

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

CREATE INDEX ... CONCURRENTLY 例外,它使用三个事务在允许并发更新的同时向表添加索引,因此它本身不能在事务中执行。

另外,数据库维护命令VACUUM不能在事务中使用。


查看完整回答
反对 回复 2019-11-13
?
万千封印

TA贡献1891条经验 获得超3个赞

看来其他答案已经过时了。


截至2019年:


Postgres支持许多版本的事务性DDL。

SQLite在许多版本中都支持事务性DDL。


查看完整回答
反对 回复 2019-11-13
  • 3 回答
  • 0 关注
  • 1058 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信