資料庫的事務必須具備acid特性,acid是指 atomicity(原子性)、consistensy(一致性)、isolation(隔離型)和durability(永續性)的英文縮寫。
1、原子性(atomicity)
事務包裝的一組sql,要麼都執行成功,要麼都失敗。這些操作是不可分割的。
2、一致性(consistency)
資料庫的資料狀態是一致的。
事務的成功與失敗,最終資料庫的資料都是符合實際生活的業務邏輯。一致性絕大多數依賴業務邏輯和原子性。
3、永續性:(durability)
事務成功提交之後,對於資料庫的改變是永久的。哪怕資料庫發生異常,重啟之後資料亦然存在。
4、隔離性(isolation)
乙個事務的成功或者失敗對於其他的事務是沒有影響。兩個事務應該相互獨立。
1、髒讀 -- 最嚴重,杜絕發生
2、不可重複讀
3、幻讀(虛讀)
乙個事務讀取了另乙個事務沒有提交的資料,非常嚴重。應當盡量避免髒讀。
1.read uncommitted 讀未提交,乙個事務讀到另乙個事務沒有提交的資料。
a) 存在:3個問題(髒讀、不可重複讀、虛讀)。
b) 解決:0個問題
2.read committed 讀已提交,乙個事務讀到另乙個事務已經提交的資料。
a) 存在:2個問題(不可重複讀、虛讀)。
b) 解決:1個問題(髒讀)
3.repeatable read:可重複讀,在乙個事務中讀到的資料始終保持一致,無論另乙個事務是否提交。
a) 存在:1個問題(虛讀)。
b) 解決:2個問題(髒讀、不可重複讀)
4.serializable 序列化,同時只能執行乙個事務,相當於事務中的單執行緒。
a) 存在:0個問題。
b) 解決:3個問題(髒讀、不可重複讀、虛讀)
安全性:serializable > repeatable read > read committed > read uncommitted
效能 : serializable < repeatable read < read committed < read uncommitted
mysql:repeatable read
oracle:read committed
查詢資料庫的隔離級別
1 show variables like '%isolation%';2或設定資料庫的隔離級別
讀未提交:read uncommitted
讀已提交:read committed
可重複讀:repeatable read
序列化:serializable
資料庫事物
事務 sqlite預設一條語句就是乙個事務,有多少條資料就有多少次磁碟操作,比如10條計入就要10次讀寫磁碟操作。解決方法 新增事務處理,把10條操作看做乙個事務。1.sqlitedatabase 方法 public void begintransaction 開始事務 注意 事務可以巢狀,通過se...
資料庫事物
1.事物處理順序事物的sql語句 用事務 事務開始和事物提交 sql語句包裹主要執行的sql語句 事物處理可以保證一組相關操作要麼都成功,要麼都失敗.1.把事務開啟 2.寫你要執行語句 3.把事務進行提交 4.把事務回滾 rollback 遇到斷電 事務沒有提交 那麼事務會自動回滾 例如 begin...
資料庫事物
事物的概念 使用者在進行資料庫操作時的乙個資料庫操作系列。對於該操作序列中的操作,要麼全部執行,要麼全部不執行。所有的操作是乙個整體,不可分割。與事物相關的概念有事物提交和事物回滾。事物提交是將事物中對資料的更新提交到資料庫中,如果執行正常則事物結束。否則在發生異常時,事物將回滾,將資料庫狀態還原到...