mysql掛起事務 MySQL事務原理

2021-10-17 19:56:47 字數 1805 閱讀 1757

原子性、穩定性和永續性實現原理

原子性、穩定性和永續性是通過redo 和 undo 日誌檔案實現的,不管是redo還是undo檔案都會有乙個快取我們稱之為redo_buf和undo_buf。同樣,資料庫檔案也會有快取稱之為data_buf。

4.1 undo 日誌檔案

undo記錄了資料在事務開始之前的值,當事務執行失敗或者rollback時可以通過undo記錄的值來恢復資料。例如 aa和bb的初始值分別為3,5。

a 事務開始

b 記錄aa=3到undo_buf

c 修改aa=1

d 記錄bb=5到undo_buf

e 修改bb=7

f 將undo_buf寫到undo(磁碟)

g 將data_buf寫到datafile(磁碟)

h 事務提交

通過undo可以保證原子性、穩定性和永續性

如果事務在f之前崩潰由於資料還沒寫入磁碟,所以資料不會被破壞。

如果事務在g之前崩潰或者回滾則可以根據undo恢復到初始狀態。

資料在任務提交之前寫到磁碟保證了永續性。

但是單純使用undo保證原子性和永續性需要在事務提交之前將資料寫到磁碟,浪費大量i/o。

4.2 redo/undo 日誌檔案

引入redo日誌記錄資料修改後的值,可以避免資料在事務提交之前必須寫入到磁碟的需求,減少i/o。

a 事務開始

b 記錄aa=3到undo_buf

c 修改aa=1 記錄redo_buf

d 記錄bb=5到undo_buf

e 修改bb=7 記錄redo_buf

f 將redo_buf寫到redo(磁碟)

g 事務提交

通過undo保證事務的原子性,redo保證永續性。

f之前崩潰由於所有資料都在記憶體,恢復後重新衝磁碟載入之前的資料,資料沒有被破壞。

fg之間的崩潰可以使用redo來恢復。

g之前的回滾都可以使用undo來完成。

5 事務操作命令

如果需要使用事務就必須選用支援事務的資料庫引擎如innodb和falcon,myisam並不支援事務。

在預設情況下mysql開啟的是autocommit模式,也就是隱含的將每條語句當做乙個事務處理,每條sql都會被自動提交。當我們使用begin或者start transcation時會把自動提交掛起,直到顯示的呼叫commit。使用事務可以有如下兩種方法:

begin; //開始事務,掛起自動提交

insert into t_cart_shopcart (user_id, sku_id, amount, shop_id, status) values(10001, 10001, 1, 10001, 0);

insert into t_cart_shopcart (user_id, sku_id, amount, shop_id, status) values(10001, 10002, 1, 10001, 0);

commit; //提交事務,恢復自動提交

set autocommit = 0; //掛起自動提交

insert into t_cart_shopcart (user_id, sku_id, amount, shop_id, status) values(10001, 10001, 1, 10001, 0);

insert into t_cart_shopcart (user_id, sku_id, amount, shop_id, status) values(10001, 10002, 1, 10001, 0);

commit; //提交事務

set autocommit = 1; //恢復自動提交

這兩種方式效果相同

mysql sql 事務寫作 mysql中的事務

事務 事務是一組原子性sql查詢語句,被當作乙個工作單元。若mysql對改事務單元內的所有sql語句都正常的執行完,則事務操作視為成功,所有的sql語句才對資料生效,若sql中任意不能執行或出錯則事務操作失敗,所有對資料的操作則無效 通過回滾恢復資料 事務有四個屬性 原子性 事務被認為不可分的乙個工...

mysql 設定唯讀事務 Spring 唯讀事務

transactional readonly true 這東西不叫唯讀事務,它只是建立了乙個唯讀的資料庫連線。transactional裡面還有個引數,叫isolation這個才是控制隔離級別的。spring提供了5種事務隔離級別予以解決 1 default預設級別 default為資料來源 資料庫...

mysql 事務 數量 Mysql 事務

什麼是事務 不可分割的操作,比如乙個事務要修改 a 表和刪除 b 表的資料兩個操作,這兩個操作都成功,這個事務才 commit,不然 rollback 每條 sql 語句都是乙個事務 只對 dml 生效 caid 一致性 consistency 讓資料保持一定程度的合理性,比如使用者加入購物車,購物...