事務在程式裡很常見 當乙個程式要執行多條sql語句時無法保證都能成功 有可能出現插入一半出現了意外 導致下面無法進行 這就無法保證要麼做要不都不做(原子性)也無法保證 資料的一致性例子:如果你用手機進行銀行轉賬 a 轉給b a應該減少資產 b應該是增加資產 如果 只有一方成功 無法完成轉賬 這個時候就需要事務
原子性原子性是指乙個事務是乙個不可分割的工作單位,其中的操作要麼都做,要麼都不做隔離性
隔離性是指多個事務併發執行的時候,事務內部的操作與其他事務是隔離的,併發執行的各個事務之間不能互相干擾
永續性
永續性是指事務一旦提交,它對資料庫的改變就應該是永久性的。接下來的其他操作或故障不應該對其有任何影響
一致性
原子性關注狀態,要麼全部成功,要麼全部失敗,不存在部分成功的狀態。而一致性關注資料的可見性,中間狀態的資料對外部不可見,只有最初狀態和最終狀態的資料對外可見
上面就是事務的特性
事務是支援隔離級別的 上面說到了事務具有隔離性 多個事務是隔離的互不干擾 下面看下 個個隔離級別髒讀是什麼未提交讀( read uncommitted )
事務中修改即使沒提交 別的事務也可讀取到(會造成髒讀)效能也一般 不常用
提交讀 ( read committed )
只有提交別的事務才能看見 再此之前都不會被看見 (常用事務ps:mysql預設不是這種)
可重複讀( repeatable read )
在乙個事務中多次查詢結果都是一致 解決了髒讀問題 但範圍查詢會出現幻讀ps:mysql預設級別 用版本控制解決幻讀(幻讀 查不不到但是又插入不進去)
可序列化( serializable )
最高隔離級別 每次讀資料都會加鎖 所以也會導致大量超時和鎖爭用 非常需要資料一致性 並且沒有併發的情況下可以使用
a事物資料讀取後,b事物回滾,導致a讀取資料有誤幻讀是什麼
a事物第一次和第二次讀取資料之間,b提交事物,導致a讀取不同
mysql如何更改事務級別 set session transaction isolation level + 級別區別:MySQL事務優化
事務的概念 事務指邏輯上的一組操作,組成這組操作的各個單元,要麼全部成功,要麼全部不成功。例如 a b轉帳,對應於如下兩條sql語句 update from account set money money 100 where name a update from account set money ...
mysql優化(1) mysql事務
事務是mysql等關係型資料庫區別於nosql的重要方面 隨著發展nosql資料庫也開始有了事物的概念 是保證資料一致性的重要手段。本文將首先介紹mysql事務相關的基礎概念,然後介紹事務的acid特性,並分析其實現原理。事務由乙個或多個sql語句組成乙個整體,如果所有的語句執行成功那麼修改將會全部...
MySQL 常用SQL優化(五)
一 分頁優化查詢。一般分頁查詢時,通過建立覆蓋索引能夠比較好地提高效能。乙個常見又非常頭疼的問題 limit 10000,10 此時mysql排序出10020條記錄後僅僅返回第10001到10020條記錄,前10000條記錄都會被拋棄,查詢和排序的代價非常高。1 第一種優化思路。在索引上完成排序分頁...