在PostgreSQL中,如果执行一个dml或ddl语句,默认一执行完就马上提交了,不能回滚,这样容易导致误操作的发生,避免这个风险的办法是关闭自动提交
1 设置\set AUTOCOMMIT off (ddl语句这里设置了之后一样会回滚,记住这里AUTOCOMMIT是大写)
2 闪回点策略,如下:
begin; -----这里的作用等同于\set AUTOCOMMIT off
insert into tb01 values(1);
savepoint sp1;
insert into tb01 values(2);
savepoint sp2;
insert into tb01 values(3);
如果直接执行 1)rollback(体现了事务的原子性,要么全回滚,要么全提交,即begin;开始的地方),那么所有数据都回滚 2)如果rollback to savepoint to sp1,那么此时则回滚点SP2则自动消失。 3)如果先回滚到SP2,那么可以继续回滚到SP1
回滚点可以运用于大事务切割,避免出错,所有操作都回滚