1. 程式人生 > >insert、delete及update 的提交和撤消

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