首先什麼是事務?這是來自官方的解釋:資料庫事務( transaction)是訪問並可能操作各種資料項的乙個資料庫操作序列,這些操作要麼全部執行,要麼全部不執行,
是乙個不可分割的工作單位。
事務由事務開始與事務結束之間執行的全部資料庫操作組成,簡單的來說就是我們執行一件事情從頭到尾的過程。
任何支援事務的資料庫,都必須具備四個特性,分別是:原子性(atomicity)、一致性(consistency)、隔離性(isolation)、永續性(durability),也就是我們常說的事務acid,
這樣才能保證事務中資料的正確性。
原子性:事務中包含的操作被看做乙個邏輯單元,這個邏輯單元中的操作要麼全部成功,要麼全部失敗。
一致性:事務完成時,資料必須處於一致狀態,資料的完整性約束沒有被破壞,事務在執行過程中發生錯誤,會被回滾(rollback)到事務開始前的狀態,就像這個事務從來沒 有執行過一樣。
隔離性:事務允許多個使用者對同乙個資料進行併發訪問,而不破壞資料的正確性 和完整性。同時,並行事務的修改必須與其他並行事務的修改相互獨立。
永續性:事務結束後,事務處理的結果必須能夠得到固化。
顧名思義就是乙個事務讀取到了另外乙個事務沒有提交的資料。
例:事務a訪問了資料庫,它幹了一件事情,往資料庫裡加上了一條新的資料,比如新增乙個使用者張三,但是沒有提交事務。
這時,來了另乙個事務b,它要查詢所有使用者的名字。
這時,如果沒有事務之間沒有有效隔離,那麼事務b返回的結果中就會出現「張三」的名字。
按理說不應該出現「張三」這個人,所以「張三」這條資料就為髒資料,這就是「髒讀(dirty read)」。
顧名思義,就是乙個事務要等另乙個事務提交後才能讀取資料。
例:事務a訪問了資料庫,它要檢視「張三」的手機號碼,檢視的結果為「12345」。
這時,事務b來了,因為「張三」修改了手機號碼為「66666」,所以要更新一下,然後提交了事務。
接著,事務a還想再看看「張三」的手機號碼,於是又執行了查詢,
結果,兩次查出來的手機號碼竟然不相同,這就是不可重複讀(unrepeatable read)。
重複讀,就是在開始讀取資料(事務開啟)時,不再允許修改操作
事務a訪問了資料庫,他想要看看資料庫的都有哪些使用者,於是執行了查詢。
這時候,事務b來了,往資料庫加入了乙個新的使用者。
這時候,事務a忘了剛才的牛人都有哪些了,於是又執行了。
結果,第一次有三個使用者,第二次有四個使用者。
相信這個時候事務a就蒙了,剛才發生了什麼?這種情況就叫「幻讀(phantom problem)」。
這是資料庫最高的隔離級別,這種級別下,事務「序列化順序執行」,也就是乙個乙個排隊執行。
這種級別下,「髒讀」、「不可重複讀」、「幻讀」都可以被避免,但是執行效率奇差,效能開銷也最大,所以基本沒人會用。
serializable:可避免髒讀、不可重複讀、虛讀情況的發生。
repeatable read:可以避免髒讀、不可重複讀情況的發生。
read committed:可以避免髒讀情況發生。
read uncommitted:最低級別,都會發生。
注意:安全級別越高,效能就越低。選擇的時候應該根據實際應用情況選擇。
資料庫事務的四大特性(ACID)以及事務的隔離級別
1 原子性 乙個事務裡面的所有資料操作是不可分割的,要麼所有的操作全部成功,要麼所有的操作全部失敗。2 一致性 事務執行前後資料庫的狀態都是一致的,不管事務執行結果是失敗還是成功,資料庫的前後狀態都是一致的。3 隔離性 併發訪問的時候,乙個事務不能干擾另乙個事務 多個併發事務之間相互隔離。4 永續性...
資料庫事務四大特性
事務的 原子性 一致性 分離性 永續性 1 原子性 事務的原子性指的是,事務中包含的程式作為資料庫的邏輯工作單位,它所做的對資料修改操作要麼全部執行,要麼完全不執行。這種特性稱為原子性。事務的原子性要求,如果把乙個事務可看作是乙個程式,它要麼完整的被執行,要麼完全不執行。就是說事務的操縱序列或者完全...
資料庫事務四大特性
資料庫事務是指作為單個邏輯工作單元執行的一系列操作,這些操作要麼全做要麼全不做,是乙個不可分割的工作單位。資料庫事務的四大特性 簡稱acid 是 事務的原子性指的是,事務中包含的程式作為資料庫的邏輯工作單位,它所做的對資料修改操作要麼全部執行,要麼完全不執行。這種特性稱為原子性。例如銀行取款事務分為...