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命令的前提下才能有效。