文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
手冊頁 (TGZ) - 258.5Kb
手冊頁 (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  InnoDB 錯誤處理

17.20.5 InnoDB 錯誤處理

以下項目描述 InnoDB 如何執行錯誤處理。InnoDB 有時只會回滾失敗的陳述式,其他時候則會回滾整個交易。

  • 如果您的表空間中檔案空間不足,則會發生 MySQL Table is full 錯誤,而 InnoDB 會回滾 SQL 陳述式。

  • 交易死結會導致 InnoDB 回滾整個交易。發生這種情況時,請重試整個交易。

    鎖定等待逾時會導致 InnoDB 回滾目前的陳述式(正在等待鎖定並遇到逾時的陳述式)。若要回滾整個交易,請在啟動伺服器時啟用 --innodb-rollback-on-timeout。如果使用預設行為,則重試陳述式;如果啟用 --innodb-rollback-on-timeout,則重試整個交易。

    在繁忙的伺服器上,死結和鎖定等待逾時都很常見,應用程式必須知道可能會發生這種情況,並透過重試來處理它們。您可以盡可能在交易期間首次變更資料和提交之間執行最少的工作,使鎖定保持在最短的時間內,並鎖定最少量的列,以降低它們發生的可能性。有時在不同的交易之間拆分工作可能實用且有幫助。

  • 如果您未在陳述式中指定 IGNORE 選項,則重複鍵錯誤會回滾 SQL 陳述式。

  • 列過長錯誤會回滾 SQL 陳述式。

  • 其他錯誤大多由 MySQL 程式碼層(高於 InnoDB 儲存引擎層級)偵測到,並回滾對應的 SQL 陳述式。在回滾單一 SQL 陳述式時,不會釋放鎖定。

在隱式回滾期間,以及執行顯式的 ROLLBACK SQL 語句時,SHOW PROCESSLIST 會在相關連線的 State 欄位中顯示 Rolling back