首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

MySQL 事務表與非事務表差異:InnoDB vs MyISAM 回滾行為實測

     編輯:Java 綜合教學

MySQL 事務表與非事務表差異:InnoDB vs MyISAM 回滾行為實測

核心概念

  • 事務表:支援 ACID,如 InnoDB
  • 非事務表:不支援回滾,如 MyISAM

實測對比

非事務表

CREATE TABLE no_trans (id INT) ENGINE=MyISAM;
START TRANSACTION;
INSERT INTO no_trans VALUES (1);
SELECT * FROM no_trans; -- 可見 1
ROLLBACK; -- Warning: Some non-transactional changed tables couldn't be rolled back
SELECT * FROM no_trans; -- 仍可見 1,資料未回滾

事務表

CREATE TABLE trans (id INT) ENGINE=InnoDB;
START TRANSACTION;
INSERT INTO trans VALUES (1);
SELECT * FROM trans; -- 可見 1
ROLLBACK;
SELECT * FROM trans; -- Empty set,資料已回滾

對 Binlog 快取參數的影響

  • max_binlog_stmt_cache_size:影響非事務表(MyISAM)大語句快取
  • max_binlog_cache_size:影響事務表(InnoDB)事務快取

實務建議

  1. 混合引擎事務中,非事務表操作不可回滾,易導致資料不一致
  2. 生產環境核心業務務必使用 InnoDB
  3. 遷移 MyISAM 至 InnoDB:ALTER TABLE t ENGINE=InnoDB;

理解引擎特性是設計可靠資料庫架構的前提。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved