交易的隔离等级范例.PPT

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
交易的隔离等级范例

第 10 章補充 交易與鎖定 (節錄自實習課課本第 20 章) 20-2 進行交易的 3 種模式 交易是以連線 (Connection) 為單位, 每個連線都可以有自己的交易。在同一個連線中, 當交易開始時, 所有後續執行的 SQL 敘述都是該交易的成員, 直到交易結束為止。事實上, SQL Server 提供了 3 種進行交易的模式: 外顯交易 (Explicit transactions) 自動認可交易 (Auto-commit transactions) 隱含交易 (Implicit transactions) 外顯交易 (Explicit transactions) 此方式就是我們前面所介紹的, 以 BEGIN TRAN 來開始交易, 而以 COMMIT TRAN 或 ROLLBACK TRAN 等敘述來結束交易。可用來啟動或結束交易的敘述有: 外顯交易 (Explicit transactions) 請注意, 有些無法 ROLLBACK 的敘述不允許使用在交易中, 包括: 此外, 在交易中也不可使用 sp_dboption 預存程序來設定資料庫選項, 或是用任何系統預存程序來更改 master 資料庫的內容。 自動認可交易 (Autocommit transactions) 這是系統預設的交易方式。當我們未明確指定要進行外顯交易時, 每個存取資料的敘述即為一個交易, 因此其執行結果也是只有完全成功 或完全取消 2 種。 隱含交易 (Implicit transactions) 隱含交易 (Implicit transactions): 當我們執行 “SET IMPLICIT_TRANSACTIONS ON” 敘述後, 系統即進入隱含交易模式:亦即交易會自動開始, 直到執行 COMMIT TRAN 或 ROLLBACK TRAN 為止。而在此交易結束後, 當執行到下一個存取資料的敘述時, 又會自動開始交易, 直到再次執行結束交易的敘述為止;如此周而復始, 循環不息。由於交易是以連線為單位, 因此您所做的隱含交易設定也只限於目前的連線, 而不會影響到其他連線。 20-4 交易儲存點的設定與回復 有時在交易中發生錯誤時, 我們會希望只要回復一小部份的操作即可, 然後在程式中改用其他方法來完成此項交易。此時即可使用 SAVE TRAN[SACTION] 來設置『交易儲存點』, 然後在必要時使用 ROLLBACK 來回復到所儲存的位置, 而不會中斷交易。 交易儲存點的設定與回復 交易儲存點的設定與回復 20-6 交易的隔離等級 在交易的 4 大特性 (ACID) 中, 有一項『隔離性』(Isolation) 是說明交易中所使用的資料, 必須適度地與其他同時進行的交易做隔離。 由於同一時間內可能有許多的交易在存取資料, 因此每個交易在存取資料時必須先將之鎖定, 以免受到其他交易的干擾。隔離等級主要是用來設定交易在『讀取』資料時的隔離狀態 (在修改資料時則一定要做完整鎖定, 因此不必設等級)。 然而, 將資料鎖定的副作用, 就是其他要使用此資料的交易必須排隊等待, 而降低了資料的『並行性』(Concurrency, 就是多個交易可同時進行的特性)。 更嚴重者, 甚至發生每個交易都鎖定了一些資料, 而又在等待一些被其他交易鎖住的資料, 如此就造成了所謂的『死結』(Dead Lock)。 交易的隔離等級 其隔離性由低到高共分為 5 等: Read uncommitted:完全沒有隔離效果, 即使要讀取的資料已被其他交易使用且尚未 COMMIT 也沒關係。因此, 讀取到的資料隨時都可能被別人更改或刪除。 Snapshot:這是 SQL Server 2005 新增加的等級。 在交易進行前先建立資料快照 (Snapshot), 其間若有別的交易要存取該資料, 則會直接傳回 Shapshot的資料 (即原本的資料), 待資料 COMMIT 完成才會將 Snapshot 卸離, 隔離等級較 Read uncommitted 稍高。雖然從 Snapshot 得到的資料很可能不是最新的資料, 但至少資料是正確的, 並不會像 Read uncommitted, 可能得到錯誤資料。 交易的隔離等級 Read committed:不允許讀取尚未 COMMIT 的資料, 因為該資料被更動的機率很大。不過, 在讀取完資料後就和 Read uncommitted 一樣, 不會在乎該資料是否還會被別人更改。因此每次讀取到的資料可能會不相同。 Repeatable read:在交易中所讀取到的資料將不允許別人更改或刪除, 以保證在交易中每次都可以讀取到相同的內容。但別人仍然

文档评论(0)

ailuojue + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档