MySQL事務提交過程(一)
阿新 • • 發佈:2018-12-25
mysql_execute_command trans_commit_stmt ha_commit_trans(thd, FALSE); { TC_LOG_DUMMY:ha_commit_low ha_commit_low() innobase_commit { //獲取innodb層對應的事務結構 trx = check_trx_exists(thd); if(單個語句,且非自動提交) {//釋放自增列佔用的autoinc鎖資源 lock_unlock_table_autoinc(trx); //標識sql語句在事務中的位置,方便語句級回滾 trx_mark_sql_stat_end(trx); } else 事務提交 { innobase_commit_low() { trx_commit_for_mysql();<span style="color: #ff0000;">trx_commit</span>(trx); } //確定事務對應的redo日誌是否落盤【根據flush_log_at_trx_commit引數,確定redo日誌落盤方式】 trx_commit_complete_for_mysql(trx); trx_flush_log_if_needed_low(trx->commit_lsn); log_write_up_to(lsn); } } }