mysql事務執行中斷事務會回滾嗎

時間 2022-12-23 09:05:03

1樓:匿名使用者

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程序來進行**。

2樓:愛可生雲資料庫

我們經常會遇到操作一張大表,發現操作時間過長或影響**業務了,想要回退大表操作的場景。在我們停止大表操作之後,等待回滾是一個很漫長的過程,儘管你可能對知道一些縮短時間的方法,處於對生產環境資料完整性的敬畏,也會選擇不做介入。最終選擇不作為的原因大多源於對操作影響的不確定性。

實踐出真知,下面針對兩種主要提升事務回滾速度的方式進行驗證,一種是提升操作可用記憶體空間,一種是通過停例項,禁用 redo 回滾方式進行進行驗證。

仔細閱讀過官方手冊的同學,一定留意到了對於提升大事務回滾效率,官方提供了兩種方法:一是增加 innodb_buffer_pool_size 引數大小,二是合理利用 innodb_force_recovery=3 引數,跳過事務回滾過程。第一種方式比較溫和,innodb_buffer_pool_size 引數是可以動態調整的,可行性也較高。

第二種方式相較之下較暴力,但效果較好。

兩種方式各有自己的優點,第一種方式對線上業務系統影響較小,不會中斷**業務。第二種方式效果更顯著,會短暫影響業務連續,回滾所有沒有提交的事務。

sql儲存過程中事務出現錯誤回滾,那麼在回滾之後的語句會執行嗎

3樓:匿名使用者

看你的語句怎麼控制。一般的應用是有錯誤後不執行後面的**。

事物回滾 能做預處理嗎 mysql

4樓:地瓜說機

pdo預處理。

許多成熟的資料庫都支援預處理語句(prepared statements)的概念。它們是什麼東西?你可以把它們想成是一種編譯過的要執行的sql語句模板,可以使用不同的變數引數定製它。

預處理語句具有兩個主要的優點:

查詢只需要被解析(或準備)一次,但可以使用相同或不同的引數執行多次。當查詢準備好(prepared)之後,資料庫就會分析,編譯並優化它要執行查詢的計劃。對於複雜查詢來說,如果你要重複執行許多次有不同引數的但結構相同的查詢,這個過程會佔用大量的時間,使得你的應用變慢。

通過使用一個預處理語句你就可以避免重複分析、編譯、優化的環節。簡單來說,預處理語句使用更少的資源,執行速度也就更快。

mysql何時隱式提交或回滾一個事務

5樓:簡單飛舞的飄

mysql以預設允許autocommit模式來開始每一個客戶端連線。當autocommit被允許之時,如果sql語句不返回錯誤的話,mysql在每個sql語句之後,做一個提交。

如果你關閉autocommit模式並且關閉一個連線而不呼叫你的事務的明確提交,則mysql回滾你的事務。

mysql執行的sql指令碼中註釋怎麼寫

mysql 伺服器支援 到該行結束 到該行結束 以及 行中間或多個行 的註釋方格 mysql select 1 1 這個註釋直到該行結束 mysql select 1 1 這個註釋直到該行結束 mysql select 1 這是一個在行中間的註釋 1 mysql select 1 這是一個 多行註釋...

c連線mysql插入資料執行成功但資料庫中沒有資料

最好就是你把這句插入語句在資料庫裡面執行一遍可不可行,以前也遇到過,提示也沒有錯誤,就是不行,其中符號打錯了 智者總要千慮 你應該用了spring配置式事務,被限制了修改了吧。如下面 propagation required propagation required propagation requ...

mysql建立不上外來鍵,sql語句一執行完就會生成一條索引,但是外來鍵卻見不上

建立外來鍵需要注意幾點 1,必須使用innodb表引擎 2,兩個表的字元編碼必須一致 3,被引用的typeid,即父表中的typeid必須是主鍵或者唯一建滿足以上幾點,sql如下 create table father typeid int primary key,name varchar 10 e...