在 mysql 命令列的預設設定下,事務都是自動提交的,即執行 sql 語句後就會馬上執行 commit 操作,可通過以下兩方法顯式處理事務:
用 begin, rollback, commit來實現
直接用 set 來改變 mysql 的自動提交模式
1、髒讀
所謂髒讀,就是指事務a讀到了事務b還沒有提交的資料,比如銀行取錢,事務a開啟事務,此時切換到事務b,事務b開啟事務取走100元,此時切換回事務a,事務a讀取的肯定是資料庫裡面的原始資料,因為事務b取走了100塊錢,並沒有提交,資料庫裡面的賬務餘額肯定還是原始餘額,這就是髒讀。
2、不可重複讀
所謂不可重複讀,就是指在乙個事務裡面讀取了兩次某個資料,讀出來的資料不一致。還是以銀行取錢為例,事務a開啟事務–>查出銀行卡餘額為1000元,此時切換到事務b,事務b開啟事務–>事務b取走100元–>提交,資料庫裡面餘額變為900元,此時切換回事務a,事務a再查一次查出賬戶餘額為900元,這樣對事務a而言,在同乙個事務內兩次讀取賬戶餘額資料不一致,這就是不可重複讀。
3、幻讀
所謂幻讀,就是指在乙個事務裡面的操作中發現了未被操作的資料。比如學生資訊,事務a開啟事務–>修改所有學生當天簽到狀況為false,此時切換到事務b,事務b開啟事務–>事務b插入了一條學生資料,此時切換回事務a,事務a提交的時候發現了一條自己沒有修改過的資料,這就是幻讀,就好像發生了幻覺一樣。幻讀出現的前提是併發的事務中有事務發生了插入、刪除操作。
MySQL 事務特徵 隔離級別
atomicity 原子性 事務是乙個原子性質的操作單元,事務裡面的對資料庫的操作要麼都執行,要麼都不執行,consistent 一致性 在事務開始之前和完成之後,資料都必須保持一致狀態,必須保證資料庫的完整性約束。也就是說,資料必須符合資料庫的預設規則 isolation 隔離性 資料庫允許多個併...
mysql隔離級別 MySQL 事務隔離級別
mysql innodb所提供的事務滿足acid的要求,事務是通過事務日誌中的redo log和undo log來實現原子性 undo log 一致性 undo log 永續性 redo log 事務通過鎖機制實現隔離性。1 事務隔離級別與實現read uncommitted 讀未提交 read c...
MySQL事務隔離級別
sql標準定義了4類隔離級別,包括了一些具體規則,用來限定事務內外的哪些改變是可見的,哪些是不可見的。低階別的隔離級一般支援更高的 併發處理,並擁有更低的系統開銷。read uncommitted 讀取未提交內容 在該隔離級別,所有事務都可以看到其他未提交事務的執行結果。本隔離級別很少用於實際應用,...