MySQL高階 事務和鎖

2021-10-21 10:18:43 字數 1225 閱讀 8322

什麼是事務

一件事就可以事務,事務就是操作過程合集統稱

事務的特性

原子性:一段事務中,要麼全部完成,要麼都不完成

隔離性:兩個客戶同時操作同樣的事務的解決方案,應用及其廣泛,所以針對以上情況出現了事務的隔離級別:讀未提交(read uncommitted)、讀提交(read committed)、可重複讀(repeatable read)和序列化(serializable)。

一致性:在事務開始之前或者結束之後,資料庫內的資料是完整的符合預設規則

永續性:一旦提交資料庫,資料就會永久儲存到資料(除非你進行了非法操作)

事務步驟

開啟事務

start transaction;sqlserver使用:begin transaction;提交事務

commit;回滾事務

rollback;

開啟事務後直接寫增刪改業務即可

事務的隔離級別

髒讀所有事務都可以看到其他未提交事務的執行結果,該級別引發的問題是——髒讀(dirty read):讀取到了未提交的資料 例:使用者a向使用者b轉賬100元,但是不將該操作提交,讀未提交的情況下,b檢視賬戶時發現錢確實已到賬,但使用者a轉賬這個操作只要不提交,事務就會被回滾,之後b再檢視賬戶時會發現錢沒到賬,這也就是出現了髒讀。

幻讀幻讀的重點在於新增或者刪除,同樣的條件, 第1次和第2次讀出來的記錄數不一樣

重複讀系統管理員a將資料庫中所有學生的成績從具體分數改為abcde等級,但是系統管理員b就在這個時候插入了一條具體分數的記錄,當系統管理員a改結束後發現還有一條記錄沒有改過來,就好像發生了幻覺一樣

序列化事務 a 和事務 b,事務 a 在運算元據庫時,事務 b 只能排隊等待。這種級別可以避免「幻讀」,每一次讀取的都是資料庫中真實存在資料,事務 a 與事務 b 序列,而不併發。

隔離級別

髒讀不可重複讀

幻讀讀未提交✔✔

✔讀已提交❌✔

✔可重複讀❌❌

✔序列化❌❌

❌鎖樂觀鎖有a、b倆事務,當a事務在查詢資料的時候,對b沒影響,而且當a事務在更改資料提交的時候雖然會驗證資料完整性,但這時b事務中資料發生改變也不會影響到a事務中對該資料的更改。

悲觀鎖看字面意思悲觀,則他就很悲觀,即當某一事務運算元據的時候,他就會提前上鎖。只有當它操作完該資料的時候釋放鎖,別的事務才可以進行操作該資料。

MySQL高階 索引 事務和鎖的了解

一 索引 1 什麼是索引?1 舉例來講就是 索引相當於字典的音序表,如果要查某個字,如果不使用音序表,則需要從幾百頁中逐頁去查。2 索引的優劣勢 1 索引的 優勢 可以快速檢索,減少 i o 次數,加快檢索速度 根據索引分組和排序,可以加快分組和排序。2 索引的 劣勢 索引本身也是表,因此會占用儲存...

mysql 事務和鎖

事務是dbms得執行單位 開啟事務 set autocommit 0 取消自動提交 或begin 手動開啟乙個事務 提交乙個事務 commit 回滾乙個事務 rollback 在mysql的innodb 引擎中,預設每個操作 insert,update,select for update lock ...

MySQL 事務和鎖

和其他資料庫相比,mysql的鎖機制比較假單,不同的引擎支援不同的鎖機制。myisam和memory使用表級鎖,bdb使用頁面鎖和表級鎖 innodb預設支援行級鎖,也支援表級鎖。myisam表鎖有兩中,乙個是都鎖,乙個是寫鎖,相容性如下 模式讀鎖 寫鎖讀鎖 相容不相容 寫鎖不相容 不相容 可見my...