日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oracle 事务概述

發布時間:2025/3/20 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle 事务概述 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這篇文章是參考老相老師的教學視頻
http://v.youku.com/v_show/id_XNDAzOTI4MDQw.html
所做的學習筆記



1.事務(Transaction)的基本概念:
?????????? 事務由一組DML語句組成(insert/ update /delete);
?????????? 用commit; 就可以提交這個事務,也就是DML語句的改動寫入數據庫了.
?????????? 在commit之前使用Rollback就可以回滾DML語句造成的數據的改動.
? ? ? ? ? ?使用savepoint xx ?可以保存保存點:? ? ? ? ? 使用Rollback to xx 回滾到保存點.

下面做個例子:
登陸sqlplus:
例如hr賬戶下有一張表CL_DEPT:


現在去查看事務的系統視圖v$transaction, 是沒有人任何記錄的:


這時我執行一條DML語句(insert),但是仲未Commit:


這時再去查看v$transaction,已經出現一條record了?然后我再執行一條DML語句(update),
再查看v$transaction, 還是一條記錄:?
注: v$transaction中的列:XIDUSN: ? undo segment number 回滾段序列號UBABLK: ?UBA(Undo block address) block number ? 回滾塊序列號UBAFIL: ? UBA file number ...
也是就說,在commit 或 rollback之前,無論執行多少條DML語句.它們都屬于同1個事務的.注意: 若此時執行grant等(DDL)語句, ?會自動觸發commit, 所以不要寫奇怪的代碼啊.
在事務提交之前,其他用戶是見不到你的改動,他們查詢對應的表,得到的還是原來的數據:?這時我們commit?查看v$transaction, 事務消失, 表示事務結束了. 而其他用戶就可以見到hr修改后的數據了.
這是默認的隔離級別,下面會提到
?
下面介紹save point:我用hr賬戶再執行一條DML語句, 這樣的話一條新的事務開始了.?這時我們執行1個保存點x1?然后再insert 1條record:??這時我后悔了, 不想插入上面的那條record, 但是又想保留第一次插入的那條,就可以用Rollback to savepointname 來回滾到保存點:??如上圖, 插入了60,TEL MADRID就是保存點前一條DML語句插入的.
但是雖然執行了Rollback 語句, 但是因為只是回滾到保存點,不是回滾整個事務,所以這個事務還沒完成的!
這是可以繼續rollback到前面的保存點, 或者commit..?
2.事務的隱式commit和rollback
1.執行DDL語句(create table之類) 會隱式提交事務2. session異常退出(包括數據庫崩潰)會令session未提交的事務回滾.3. session 正常退出 (輸入 exit/關閉終端窗口/輸入ctrl +D) 會隱式提交事務. 這個要注意啊
無論如何,要盡量避免事務的隱式的commit和rollback.

3事務的特性
事務包含4大特性ACID:
分別是:
原子性(Atomicity)
一致性(Consistency)
隔離性(Isolation)
持久性(Durability)

3.1 原子性(Atomicity):
??? 事務的原子性是指事務中所有的操作,要么都做, 要么都不做,保證數據庫是一致的.
??? 例如:? A賬戶向B賬戶劃賬1000蚊,? 則先將A減少1000,然后將B增加1000,這兩個動作要么都提交,要么都回滾,不能只提交1個另1個無效,否則數據總賬就變化了.


3.2 一致性(Consistency):
?????? 一致性是指數據庫在事務操作前和事務處理后, 其中的數據必須都滿足業務規則約束.
??????? 例如: A, B賬戶的總金額在轉帳前和和轉帳后必須一致,其中的不一致必須是短暫的,在事務提交后就會消失的.
??????? 再如: 約定B賬戶不能多余1000元, 則轉出1000成功, 而B賬戶轉入失敗, 最終由原子性得到---整個事務回滾.


3.3 隔離性(Isolation):
??????? 隔離性是指數據庫允許多個并發事務同時對數據進行讀寫和修改的能力,隔離性可以防止多個事務并發執行時由于交叉執行時導致數據的不一致.
???
??????? 例如: 在A,B 之間轉帳時, C同時向A轉帳,若同時進行則A B之間的一致性不能滿足,所以當A B事務執行時,其他事務不能訪問(修改)當前相關的數據.

3.4 持久性(Durabiity)
?????? 持久性表示為: 事務處理結束后,對數據的修改是永久的,即使系統故障也不會丟失
?????? 在提交啊之前如果系統故障,則所有信息全部丟失,提交后數據存放在磁盤中,是永久性的.


4.事務的隔離級別.
級別:(只能用普通用戶執行)
(串行)? SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
commit;

SET TRANSACTION ISOLATION LEVEL READ COMMITED;(默認)



4.1 SET TRANSACTION ISOLATION LEVEL READ COMMITED;(默認)
我們知道默認的事務隔離級別是這樣的:
如上面HR 和 scott的例子
Session B見不到 Session A提交前修改的數據, 但Session A一旦提交, B馬上就見到了.


4.2 (串行)SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
但是我們執行上面那條語句后再試下:(用普通用戶執行)
這時scott 執行將事務隔離化設為串行:
?

?

這時HR 向cl_dept插入一條數據:
?
這時Scott去查看這張表,當然是見不到HR未commit的新數據行的:
?
這時HR commit這條transaction:
?
再去scott那條session查看對應表, 發現即使hr commit了事務,? scott還是見不到修改后的數據:
?
那什么時候scott才能看到Hr修改的數據呢,? 這時需要scott 執行commit...


也就是說scott執行了SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
之后,相當與自己開 1個事務, 在這個事務commit之前,? 他見不到其他session的任何的數據改動.

這個特性有時在不想見到數據改動的情況有用,例如提取數據做報表, 需要一定時間的靜態數據.



?5.另外兩條 Set transaction 語句:
5.1 SET TRANSACTION? READ ONLY;
執行了上面那個語句, 你就不能執行DML語句了.. 也就是不能修改數據.
除非你執行rollback 或 commit;


5.1 SET TRANSACTION? READ WRITE;
這個是默認的,沒什么可說啦~



總結

以上是生活随笔為你收集整理的Oracle 事务概述的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。