事物是一條或者多條sql語句組成的執行序列,這個序列中的所有語句都屬於同乙個工作單元,要麼同時完成,其中如果有乙個失敗,則其他操作都要回滾。
事物是乙個不可分割的資料庫邏輯工作單位,要麼全部完成,要不失敗回滾。
事務執行的結果必須使資料庫從乙個一致性狀態變到另乙個一致性狀態。
乙個事物的執行不能被別的併發事物所干擾
事物一旦提交,其對資料庫的改變應該是永久的。
資料庫4中隔離級別如下所示。
隔離級別
髒讀不可重複讀
幻讀read uncommitted(讀未提交的)√√
√read committed (讀已提交的)×√
√repeatable read(可重複的)××
√serializable(可序列化)××
× 髒讀:即乙個事物讀到了另乙個事物(當其執行插入,更新等操作時)未提交的資料。讀髒資料一般來說是不被允許的,許多資料庫預設設定的隔離級別也不會是讀未提交的,如oracle預設的是讀已提交的,在oracle中,當前乙個事物如果未提交,其dml操作,對別的事物來說是不可見的,未提交的資料,存在快取記憶體區當中,只有提交了之後才會持久化。而mysql預設的資料庫隔離級別是可重複讀。
不可重複讀:(在沒有加鎖的情況下)事物a,執行前後2次執行一條sql,發現sql的結果不同,因為b事物在a事物執行第二次查詢的時候,對a的結果的某些行提交了進行了更新,或者刪除,並提交了事物。導致a事物,第二次查詢出的結果和第一次不一樣。
幻讀:a事物執行一條sql查詢,b事物對a事物sql的相關表新增一條資料,並提交。a事物第二次查詢時發現資料行增加了。由此出現了幻讀,可重複讀和幻讀的區別在於,前者是對已存在的資料進行併發操作,後者則是新增資料對舊的結果集的影響。有時候幻讀是我們需要的,有時候是不需要的,這還得看具體業務的要求。
serializable(可序列化) :嚴重影響資料庫效能,一般不會用到。
企業中大多數都是使用read commited來避免髒讀,如果要避免不可重複讀則需要加樂觀鎖或悲觀鎖來對,資料操作定製不同的策略來解決。
事物的四個特性和隔離級別
一 什麼是事務 事務是應用程式中一系列嚴密的操作,所有操作必須成功完成,否則在每個操作中所作的所有更改都會被撤消。也就是事務具有原子性,乙個事務中的一系列的操作要麼全部成功,要麼乙個都不做。事務的結束有兩種,當事務中的所以步驟全部成功執行時,事務提交。如果其中乙個步驟失敗,將發生回滾操作,撤消撤消之...
事物隔離的四個級別
隔離級別 內容特點 read uncommited 讀未提交 向資料庫中插入了乙個值,此時並沒有提交,但是資料庫中已經看到這個值 例如 向資料庫update值 101,此時發現提交錯誤,查詢時發現值已經變成101,事物回滾後重新插入100 並提交,此時再查資料庫值已經變成100,讀未提交容易觸發髒讀...
事物的四個特性
事物的特性 1.原子性 不可在細分,要麼執行,要麼不執行 2.一致性 主要針對資料庫,事物執行成功則資料庫變更,失敗不變更。3.隔離性 事物之間可以同時執行,事物之間是隔離的 4.持續性 事物一旦執行成功,執行之後的結果是持續的 ps 補充點資料型別基礎 8種資料型別及封裝類,及所佔位元組 型別 b...