mysql回滾命令 關於MySQL回滾機制

2021-10-25 14:37:12 字數 921 閱讀 2861

在事務中,每個正確的原子操作都會被順序執行,直到遇到錯誤的原子操作,此時事務會將之前的操作進行回滾。回滾的意思是如果之前是插入操作,那麼會執行刪 除插入的記錄,如果之前是update操作,也會執行update操作將之前的記錄還原

因此,正確的原子操作是真正被執行過的。是物理執行。

在當前事務中確實能看到插入的記錄。最後只不過刪除了。但是auto_increment不會應刪除而改變值。

1、為什麼auto_increament沒有回滾?

因為innodb的auto_increament的計數器記錄的當前值是儲存在存記憶體中的,並不是存在於磁碟上,當mysql server處於執行的時候,這個計數值只會隨著insert改增長,不會隨著delete而減少。而當mysql server啟動時,當我們需要去查詢auto_increment計數值時,mysql便會自動執行:select max(id) from 表名 for update;語句來獲得當前auto_increment列的最大值,然後將這個值放到auto_increment計數器中。所以就算 rollback mysql的auto_increament計數器也不會作負運算。

2、mysql的事務對錶操作的時候是否是物理操作?

mysql的事務是有redo和undo的,redo操作的所有資訊都是記錄到 redo_log中,也就是說當乙個事務做commit操作時,需要先把這個事務的操作寫到redo_log中,然後再把這些操作flush到磁碟上,當 出現故障時,只需要讀取redo_log,然後再重新flush到磁碟就行了。

而對於undo就比較麻煩,mysql在處理事務時,會在資料共享 表空間裡申請乙個段叫做segment段,用儲存undo資訊,當在處理rollback,不是完完全全的物理undo,而是邏輯undo,就是說會對之 前的操作進行反操作,但是這些共享表空間是不進行**的。這些表空間的**需要由mysql的master thread程序來進行**。

關於回滾,mysql

假如銀行中轉帳的時候,如果乙個地方的錢已經發出去了,而另外乙個地方突然停最,那麼這樣就會造成一種情況就是轉帳失敗了,那到怎麼處理這種情況了呢,做乙個簡單的刪除兩個表中的內容來說乙個 conn new mysqli localhost username 123 mydata conn query se...

MYSQL資料回滾

基本上每個跟資料庫打交道的程式設計師 當然也可能是你同事 都會碰乙個問題,mysql誤操作後如何快速回滾?比如,delete一張表,忘加限制條件,整張表沒了。假如這還是線上環境核心業務資料,那這事就鬧大了。誤操作後,能快速回滾資料是非常重要的。binlog2sql快速回滾 首先,確認你的mysql ...

mysql事務回滾

先收集網上的一些,待仔細測試研究 事務是資料庫更新操作的基本單位,事務回滾是指將該事務已經完成的對資料庫的更新操作撤銷。所謂事務是使用者定義的乙個資料庫操作序列,這些操作要麼全做要麼全不做,是乙個不可分割的工作 單位。例如,在關聯式資料庫中,乙個事務可以是一條sql語句 一組sql語句或整個程式。簡...