PostgreSQL中的DDL支持回滚

在Oracle或MySQL中,当执行到DDL语句时,会隐式的将当前回话的事务进行一次“COMMIT”操作,因此在MySQL或Oracle中执行DDL语句时,应该严格地将DDL和DML完全分开,不能混合在一起执行。

在PG中,DDL语句是可以被回滚的。

Oracle

SYS@LHR11G> SET TRANSACTION NAME 't1';
Transaction set.
SYS@LHR11G> create table aa(id int);
Table created.
SYS@LHR11G> select * from aa;
no rows selected
SYS@LHR11G> insert into aa values(1);
1 row created.
SYS@LHR11G> select * from aa;
        ID
----------
         1
SYS@LHR11G> rollback;
Rollback complete.
SYS@LHR11G> select * from aa;
no rows selected

在Oracle的一个事务中,DDL语句不会被回滚。

MySQL

MySQL [lhrdb]> begin;
Query OK, 0 rows affected (0.05 sec)
MySQL [lhrdb]>
MySQL [lhrdb]> create table bb(id int);
Query OK, 0 rows affected (0.11 sec)
MySQL [lhrdb]> rollback;
Query OK, 0 rows affected (0.06 sec)
MySQL [lhrdb]> select * from bb;
Empty set (0.08 sec)
MySQL [lhrdb]> begin;
Query OK, 0 rows affected (0.05 sec)
MySQL [lhrdb]>
MySQL [lhrdb]>
MySQL [lhrdb]> create table cc(id int);
Query OK, 0 rows affected (0.64 sec)
MySQL [lhrdb]> insert into cc values(1);
Query OK, 1 row affected (0.05 sec)
MySQL [lhrdb]> select * from cc;
+------+
| id   |
+------+
|    1 |
+------+
1 row in set (0.05 sec)
MySQL [lhrdb]> rollback;
Query OK, 0 rows affected (0.05 sec)
MySQL [lhrdb]> select * from cc;
Empty set (0.05 sec)

在MySQL的一个事务中,DDL语句不会被回滚。

PostgreSQL

postgres=# begin;
BEGIN
postgres=*# create table aa(id int);
CREATE TABLE
postgres=*# select * from aa;
 id
----
(0 rows)
postgres=*# rollback;
ROLLBACK
postgres=# select * from aa;
ERROR:  relation 'aa' does not exist
LINE 1: select * from aa;
                      ^
postgres=# begin;
BEGIN
postgres=*# create table bb(id int);
CREATE TABLE
postgres=*# insert into bb values(1);
INSERT 0 1
postgres=*# commit;
COMMIT
postgres=# select * from bb;
 id
----
  1
(1 row)
postgres=# begin;
BEGIN
postgres=*# truncate table bb;
TRUNCATE TABLE
postgres=*# rollback;
ROLLBACK
postgres=# select * from bb;
 id
----
  1
(1 row)

可以看到,在PG中,DDL语句可以进行回滚。

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/237293.html

(0)
上一篇 2022年1月25日 21:41
下一篇 2022年1月25日

相关推荐

发表回复

登录后才能评论