sql語句對數據庫操做構成事物。sql
事物的特性:ACID數據庫
•Atomicity(原子性):一個事物要麼全都被執行,要麼全都不執行,不會存在執行結束在中間環節。若是事物在執行過程當中發生異常,則會回滾到事物執行以前的狀態。能夠簡單認爲"同生共死"。併發
•Consistency(一致性):在事物開始以前和事物結束以後,數據庫的完整性沒有被破壞,操做符合預期。spa
•Isolation(隔離性):同一時間,只容許一個事物請求同一數據。同一時間多個用戶併發訪問數據庫時,數據庫爲每個用戶開啓一個事物,不一樣事物之間彼此互相隔離。ci
•Durability(持久性):一個事物一旦被提交,那麼對數據庫中數據的影響是永久的,即便數據庫遇到故障也不會改變事物對數據庫的操做。it
對於事物,若是不考慮隔離級別,則會出現問題:io
1.髒讀table
對於事物A和B,事物A讀取了B未提交的數據,事物B遇到異常進行了回滾操做,那麼就會產生髒讀。sql語句
2.不可重複讀序列化
事物A屢次對同一數據進行讀取,在讀取過程當中事物B對數據進行屢次修改,致使事物A每次讀取的數據都不一致(側重於修改)。
3.幻讀
事物A對數據進行了修改,事物B進行了插入或刪除操做,事物A操做結束之後發現仍舊存在未被修改的數據,彷彿幻覺同樣,稱之爲幻讀(側重於新增或刪除)。
數據庫提供四種隔離級別:
事物隔離級別 | 髒讀 | 不可重複讀 | 幻讀 |
讀未提交 | 會 | 會 | 會 |
讀已提交 | 否 | 會 | 會 |
可重複讀 | 否 | 否 | 會 |
序列化 | 否 | 否 | 否 |
1.讀未提交(Read Uncommitted)
能夠讀取到未被提交的數據
2.讀已提交(Read Committed)
能夠讀取已經提交的數據
3.可重複讀(Repeatable Read)
在數據讀取以後加鎖,明確數據讀取是爲了更新,不容許其餘事物進行修改,相似讀取數據以後事物不結束,其餘事物沒法操做。
4.序列化(Serializable)
對於一個事物,必須執行完該事物的全部子事物才能夠執行其餘的事物 。
隔離級別:序列化>可重複讀>讀已提交>讀未提交