序列:兩個事務分別執行,假設兩個事務t1和t2,分別的執行過程為(t1,t2)或(t2,t1),即先執行完t1再執行t2,或先執行t2再執行t1,,事務的中間操作沒有交叉。
可序列化:兩個事務執行的結果和事務序列執行的結果相同,注意,這裡更側重的是結果相同。
衝突:每個事務可簡化為一組針對資料庫物件的read和write操作序列,則針對同乙個資料庫物件的操作中,在交叉執行的read和write操作序列中,如果兩個操作中有乙個包含了write操作,則說兩個操作是衝突的,即兩個操作不能交換順序。假設這個資料庫物件為x,則r1(x)和r2(x)不衝突,其中不包含write操作,r1(x)和w2(x)、w1(x)和r1(x)、w1(x)和w2(x)是衝突的。
衝突等價:把不衝突的操作進行交換,最終可以得出同乙個操作序列的兩個排程,稱為衝突等價的。
衝突可序列化:乙個排程和乙個序列的排程是衝突等價的,這個排程也必然是可序列化的。
衝突可序列化和可序列化比較:
情況一:依賴於具體細節:有一些可序列化的排程並非衝突可序列化的。一些排程的執行結果和序列的執行結果相同,是可序列化的,但是其依賴於具體的執行細節,比如兩個事務中所有的操作都是針對同乙個資料庫元素的乘1操作,無論交叉執行的順序如何,最終的結果都和序列執行的結果相同,但這依賴於乘1這樣的具體細節。如果換成乘法和加法混合,則會有先乘後加還是先加後乘的問題。
情況二:後面的事務覆蓋:加入有三個事務,其中t1和t2分別對資料庫物件x進行write操作,即分別執行了w1(x)和w2(x),然後第三個事務對資料庫物件x執行了w3(x)操作,這個排程一定是序列化的,因為最終結果去絕對第三個事務的執行結果,所以t1和t2的執行順序可以互換,但這兩個事務的操作時衝突的。
時間戳的兩個問題:過晚的讀和過晚的寫,都是由於後發生的事務先行對資料進行了讀寫,而先發生的事務再對資料進行寫讀造成的。
MySQL資料庫之併發控制
無論何時,只要有多個查詢需要在同一時刻修改資料,都會產生併發控制的問題。本章的目的是討論mysql在兩個層面的併發控制 伺服器層與儲存引擎層。併發控制是乙個內容龐大的話題,有大量的理 獻對其進行過詳細的論述。本章只是簡要地討論mysql是如何併發讀寫的,因此讀者需要有相關的知識來理解本章接下來的內容...
資料庫併發控制
資料庫併發控制 1 在資料庫中為什麼要併發控制?答 資料庫是共享資源,通常有許多個事務同時在執行。當多個事務併發地訪問資料庫時就會產生同時讀取和 或修改同一資料的情況。若對併發操作不加控制就可能會訪問和儲存不正確的資料,破壞資料庫的一致性。所以資料庫管理系統必須提供併發控制機制。2 併發操作可能會產...
資料庫併發控制
acid,是指在可靠資料庫管理系統 dbms 中,事務 transaction 所應該具有的四個特性 a 原子性 atomicity 事務是乙個或多個行為 在一起組成乙個單獨的工作單元,事務中的動作要不都發生,要不都不發生.c 一致性 consistent 即在事務開始之前和結束之後,資料庫的完整性...