【转】Insert、Delete及Update 的提交和撤消

1  自动提交的设置
    为了保证在SQL>方式下进行INSERT、DELETE和UPDATE操作达到安全的目的,一般在SQL>下进行INSERT、DELETE和UPDATE操作前,建议将环境设置成为非自动提交的方式。
我们可以在SQL>下用 show autocommit 命令查看当前该参数的状态。如果状态是ON,则建议用下面命令将其设置为 OFF状态,这样做主要目的是:即使误删除某些记录也可以用ROLLBACK命令进行恢复。

 查看当前的提交状态:
SQL>show    autocommit
autocommit    OFF

 设置是否自动提交的命令:
             SET   AUTO[commit]{ON|OFF|IMM{[EDIATE]|n}(oracle8
             SET   AUTO[commit]{ON|OFF|IMM{[EDIATE]}(oracle7
             当设为imm时,每作一个修改操作均自动提交。
             当设n(n为一个整数),当作过n个修改时自动提交。

 设置为非自动提交:
SQL>set autocommit off

 设置为自动提交:
SQL>set autocommit on

 Commit
Commit     Complete
(这样的命令表示以前的操作到目前为止都进行提交,不是仅提交当前的操作)

 rollback
rollback    complete
(只回滚那些未被提交的且最近一次的那些事务)

 隐含提交
虽然有的操作并不发出commit,但我们用exit 退出后系统会自动提交,目前exit等价于quit,以前oracle v5如果用quit退出,则所作修改不提交。

 自动回滚
oracle在遇到异外情况下,如断电,系统故障时,自动采取回滚。
例。

SQL>show user
User为“SCOTT”
SQL>show autocommit
Autocommit off
SQL>
SQL> update emp set sal = sal*1.2 where deptno=10;

已更新2行。

SQL> rollback;

重算已完成。





2  保留点和撤消

    我们可以使用 ROLLBACK 命令撤消最近一次所做的操作,要想实现对前面的所有各个操作也要撤消的话,就必须在每个操作命令前设置相应的保留点。当对每个操作都设置了相应的保留点,我们就可以根据需要用ROLLBACK TO xx 来实现撤消到某一步。

 SAVEPOINT命令
SAVEPOINT savepoint_work;

其中: savepoint_work 是要设置的保留点标识。

 ROLLBACK命令
ROLLBACK [WORK ] [TO [SAVEPOINT] savepoint_work]

其中: savepoint_work 是要设置的保留点标识。

例子:
-- 看当前用户的名字
SQL> show user
USER 为"ZHAO"

-- 先查看emp表的记录数
SQL> select * from emp;


ENAME          SAL  DEPTNO   TEL
-------------------- ------------  ------------ -----------------
赵             99999.12     10    1360 136 5681
张x           8888.88      10    12345

-- 设置第1个保留点a
SQL> savepoint a;
保存点已创建。

--插入第1条记录
SQL> insert into emp values('John',123.45,20,'56789');

已创建 1 行。

-- 设置第2个保留点b
SQL> savepoint b;

保存点已创建。

--插入第2条记录
SQL> insert into emp values('Scott',456.78,20,'13601361234');

已创建 1 行。
-- 设置第3个保留点c
SQL> savepoint c;

保存点已创建。

-- 插入第3条记录
SQL> insert into emp values('赵x',3210.1,20,'62348901');

已创建 1 行。

-- 查询到目前为止的emp表记录数
SQL> select * from emp;

ENAME          SAL   DEPTNO   TEL
-------------------- ---------- ---------- --------------------
赵                  99999.12        10 1360 136 5681
张x                8898.88         10 12345
John              123.45         20 56789
Scott              456.78         20 13601361234
赵x                3210.1         20 62348901

-- 要求撤消到第2步,即撤消到保留点b
SQL> rollback to b;

重算已完成。

-- 再查询撤消后的emp 表记录情况
SQL> select * from emp;

ENAME          SAL   DEPTNO  TEL
-------------------- ---------------- -------- --------------------
赵                    99999.12   10 1360 136 5681
张x                  8898.88    10 12345
John               123.45    20 56789




注意:撤消的处理必须是在没有发出COMMIT命令的前提下才能有效。

猜你喜欢

转载自hxm890630.iteye.com/blog/2200025