http://wiki.postgresql.org/wiki/Transactional_DDL_in_PostgreSQL:_A_Competitive_Analysis provides an overview of this issue from PostgreSQL’s perspective.
Is DDL transactional according to this document?
- PostgreSQL – yes
- MySQL – no; DDL causes an implicit commit
- Oracle Database 11g Release 2 and above – by default, no, but an alternative called edition-based redefinition exists
- Older versions of Oracle – no; DDL causes an implicit commit
- SQL Server – yes
- Sybase Adaptive Server – yes
- DB2 – yes
- Informix – yes
- Firebird (Interbase) – yes
SQLite also appears to have transactional DDL as well. I was able to ROLLBACK
a CREATE TABLE
statement in SQLite. Its CREATE TABLE
documentation does not mention any special transactional ‘gotchas’.