set autocommit=off 取消自動提交處理,開啟事務處理set autocommit=on 打開自動提交處理,關閉事務處理commit 提交事務rollback to[回滾點] 回滾操作savepoint 事務保存點名稱 設置事務保存點在Oracle數據庫中,每個連接到此數據庫的用戶都是一個session,每個session都擁有獨立的事務,不同的session事務是完全隔離的;
事務操作的基本形式
1. 打開兩個sqlplus,表示兩個session,使用同一個賬號登陸即可;
示例:第一個sqlplus執行以下語句:DELETE FROM myemp WHEREMONTHS_BETWEEN(sysdate,hiredate)/12>32 ;第一個sqlplus窗口執行以下的數據庫查詢操作SELECT empno,ename,hiredate,job,sal FROM myemp ;可以發現數據已經刪除2. 第二個sqlplus窗口執行以下的數據庫查詢操作,會發現數據并沒有刪除
這就是事務操作造成的。對每個session而言,每個數據庫的更新操作在事務沒有被提交之前都只是暫時保存在一段緩沖區中,并不會真正向數據庫中發出命令,如果用戶發現操作有問題,則可以進行事務的回滾
SELECT empno,ename,hiredate,job,sal FROM myemp ;
3. 在第一個sqlplus窗口中使用ROLLBACK回滾事務
ROLLBACK ;當事務回滾完成之后,再次查詢myemp表中的相關數據,會發現數據恢復了SELECT empno,ename,hiredate,job,sal FROM myemp ;4. 可以通過提交事務,讓刪除操作起作用
DELETE FROM myemp WHERE MONTHS_BETWEEN(sysdate,hiredate)/12>32 ;COMMIT ;5. 事務提交后,通過第二個sqlplus窗口查看刪除后的myemp表內容
SELECT empno,ename,hiredate,job,sal FROM myemp ;默認,執行rollback意味著全部的操作都要回滾,要回滾到指定的操作,可以采用savepoint設置一些保存點,在回滾的時候,就可以通過rollback返回指定的保存點上,savepoint
設置多個更新操作
--插入數據: insert into myemp(empno,ename,hiredate,job,sal) values(1234,'hey',to_date('1988-05-29','yyyy-mm-dd'),'經理',3000); --更新數據: update myemp set sal = 5000 where empno=1234; --設置存儲點A: SAVEPOINT sp_a; --插入數據: insert into myemp(empno,ename,hiredate,job,sal) values(5678,'yang',to_date('1989-11-11','yyyy-mm-dd'),'人事',2000); --更新數據: update myemp set job = '總監' where empno = 5678; --設置存儲點B: SAVEPOINT sp_b; --刪除全部數據: delete from myemp;--執行以上的命令之后,會設置兩個存儲點,sp_a,sp_b; --查詢myemp表的數據,會找不到任何數據 SELECT empno,ename,hiredate,job,sal FROM myemp ; --下面使用sp_b保存點,回滾 ROLLBACK TO sp_b ; --再次查詢 SELECT empno,ename,hiredate,job,sal FROM myemp ; --再將事務回滾到sp_a ROLLBACK TO sp_a ; --再次查詢此表查看變化;設置事務自動提交
1. 通過設置存儲點回滾比較麻煩,通過如下命令設置事務的自動提交
2. 將事務設置成自動提交,語法:
SET AUTOCOMMIT [ON | OFF];設置事務自動提交:SET AUTOCOMMIT ON ;
|
新聞熱點
疑難解答