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