MySQL 9.0 發行說明
下列項目描述 InnoDB 如何執行錯誤處理。InnoDB 有時只會復原失敗的陳述式,有時則會復原整個交易。
如果您的表空間中檔案空間不足,則會發生 MySQL
Table is full錯誤,且InnoDB會復原 SQL 陳述式。交易死鎖會導致
InnoDB復原整個交易。發生這種情況時,請重試整個交易。鎖定等待逾時會導致
InnoDB復原目前的陳述式 (正在等待鎖定並遇到逾時的陳述式)。若要復原整個交易,請使用啟用的--innodb-rollback-on-timeout啟動伺服器。如果使用預設行為,請重試該陳述式;如果啟用--innodb-rollback-on-timeout,則重試整個交易。死鎖和鎖定等待逾時在忙碌的伺服器上都是正常的,而且應用程式必須知道它們可能會發生並透過重試來處理它們。您可以透過在交易期間第一次變更資料和提交之間盡可能少做些工作,以減少它們發生的可能性,這樣鎖定會保持在盡可能短的時間內,且鎖定的列數盡可能少。有時在不同的交易之間拆分工作可能是實際且有幫助的。
如果未在陳述式中指定
IGNORE選項,則重複鍵錯誤會復原 SQL 陳述式。row too long error會復原 SQL 陳述式。其他錯誤大多由 MySQL 程式碼層 (高於
InnoDB儲存引擎層) 偵測到,並且它們會復原對應的 SQL 陳述式。在復原單一 SQL 陳述式時,不會釋放鎖定。
在隱式復原期間,以及在執行明確的 ROLLBACK SQL 陳述式期間,SHOW PROCESSLIST 會在相關連線的 State 欄中顯示 Rolling back。