事物
1、事物介紹
事物事邏輯上的一組操作,組成這組操作的各個邏輯元素單元,要麼一起成功,要麼一起失敗。
1.1 事物的特性
原子性(atomicity):一個事物事一個不可分割的工作單位。
一致性(consistency):事物必須是數據從一個一致性狀態變成到另一個一致性狀態。
隔離性(isolation):一個事物的執行不能被其他事物干擾,一個事物內部的操作及使用的數據對併發的其他事物事隔離的,併發執行的各個事物之間不能互相干擾。
持久性(durabilety):一個事物一旦提交,他對數據庫中的改變就應該是永久的。
1.2 不考慮隔離性引發的安全問題
髒讀:
髒讀就是指當一個事務正在訪問數據,並且對數據進行了修改,而這種修改還沒有提交到數據庫中,這時,另外一個事務也訪問這個數據,然後使用了這個數據。
不可重複讀:
是指在一個事務內,多次讀同一數據。在這個事務還沒有結束時,另外一個事務也訪問update該同一數據。那麼,在第一個事務中的兩次讀數據之間,由於第二個事務的修改,那麼第一個事務兩次讀到的的數據可能是不一樣的。這樣就發生了在一個事務內兩次讀到的數據是不一樣的,因此稱爲是不可重複讀。(即不能讀到相同的數據內容)
幻讀:
一個事務讀到了另一個事務已提交的insert數據,導致多次查詢結果不一樣。
1.3 設置事物隔離級別
讀未提交(ReadUncommitted):髒讀,不可重複讀,幻讀都有可能發生
讀已提交(ReadCommitted):避免髒讀。但是不可重複讀和幻讀有可能發生
可重複讀(RepetableRead):避免髒讀和不可重複讀。但是幻讀有可能發生
串行化(Serializable):避免髒讀、不可重複讀、幻讀。
√可能出現 ×不可能出現
事務隔離級別 |
髒讀 |
不可重複讀 |
幻讀 |
讀未提交 |
√ |
√ |
√ |
讀已提交 |
× |
√ |
√ |
可重複讀 |
× |
× |
√ |
串行化 |
× |
× |
× |